辞書、これは今でも使っていますか?インターネットが発展するにつれて、インターネットを使用する人はますます少なくなっています。多くの人はオンラインで検索することに慣れています。さまざまな辞書には Web 版だけでなく、モバイル版もあります。私はかつて小さな「新華辞典」を使っていました。
「新華辞典」は中国初の現代中国語辞典です。最も古い名前は『呉記小辞典』ですが、編纂できませんでした。 1953年以降は再編集が行われ、規約は『呉事小辞典』から全面的に採用されている。 1953年から刊行され改訂を重ねてきたが、1957年に商業出版局から出版された『新華辞典』が初版として使用された。当初は新華辞典出版局によって編纂されたが、1956 年に中国科学院言語学研究所(現在の中国社会科学院言語学研究所)の辞書編集局に統合された。新華辞典はThe Commercial Pressから発行されています。何世代にもわたって何百人もの専門家や学者によって10回以上の大規模な改訂が行われ、200回以上再版されました。これまでのところ、世界の出版史上で最も発行部数が多い辞書となっています。
ここで取り上げた辞書は昔を思い出すためのものではありません。代わりに、辞書の使用方法について読者に思い出させます。まず索引を確認し (ピンインか部首検索か)、次に索引から対応するコンテンツを見つけます。
この方法はターゲットを素早く見つけることができます。
Python にもこれに似たデータがあります。似ているだけでなく、このデータの名前は、先ほどの int/str/list と同様に、辞書と呼ばれます。このタイプのデータの名前は次のとおりです: dict
管理者によると、dict とそれに関連する属性メソッドの作成方法を知る必要があるとのことです。
以前の基礎がすでにあるので、学習をスピードアップできます。
私は以前、Kanguan は学習と探索に適した方法であると提案しました。たとえば、str の属性メソッドについて知りたい場合は、対話モードで使用できます。
ここで変更して dir を使用すると、同じ結果が得られます。もっとシンプルです。インタラクティブモードにしてください:
>>> dir(dict) ['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']
__ (二重アンダースコア) で始まるものは無視されます。背面を見てください。さらに詳しく知りたい場合は、次のようにしてください:
値(...)
D.values() -> D の値のリスト
(終わり)
概要
Python のdict には次の特徴があります:
dict は変更可能です
dict は任意の数の Python オブジェクトを保存できます
dict は任意の Python データ型を保存できます
dict はデータを:key:value、つまり「key:value」のペアの形式で保存し、各キーは一意です。
dict は連想配列またはハッシュ テーブルとも呼ばれます。
上記の内容がよくわからなくても、次のような学習、特にさまざまな実験を通して理解することができます。
辞書を作成する
辞書を作成する方法は、以前の int/str/list よりもはるかにたくさんあります。なぜこれほどたくさんあるのでしょうか。複雑なものは複数の経路で生成されるのが一般的ですが、これは安全性や利便性の観点からも考慮されています。
方法 1:
空の辞書を作成します。この空の辞書は、後で内容を追加するために使用できます。
>>> mydict = {} >>> mydict {} >>> mydict["site"] = "qiwsir.github.io" >>> mydict[1] = 80 >>> mydict[2] = "python" >>> mydict["name"] = ["zhangsan","lisi","wangwu"] >>> mydict {1: 80, 2: 'python', 'site': 'qiwsir.github.io', 'name': ['zhangsan', 'lisi', 'wangwu']} >>> mydict[1] = 90 #如果这样,则是修改这个键的值 >>> mydict {1: 90, 2: 'python', 'site': 'qiwsir.github.io', 'name': ['zhangsan', 'lisi', 'wangwu']}
方法 2:
>>> name = (["first","Google"],["second","Yahoo"]) #这是另外一种数据类型,称之为元组,后面会讲到 >>> website = dict(name) >>> website {'second': 'Yahoo', 'first': 'Google'}
方法 3:
このメソッドは、fromkeys を使用する点で上記とは異なります
>>> website = {}.fromkeys(("third","forth"),"facebook") >>> website {'forth': 'facebook', 'third': 'facebook'}
需要提醒的是,这种方法是从新建立一个dict。
访问dict的值
因为dict是以键值对的形式存储数据的,所以,只要知道键,就能得到值。这本质上就是一种映射关系。
>>> person {'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'} >>> person['name'] 'qiwsir' >>> person['language'] 'python' >>> site = person['site'] >>> print site qiwsir.github.io
如同前面所讲,通过键能够增加dict中的值,通过键能够改变dict中的值,通过键也能够访问dict中的值。
看官可以跟list对比一下。如果我们访问list中的元素,可以通过索引值得到(list[i]),如果是让机器来巡回访问,就可以用for语句。复习一下:
>>> person_list = ["qiwsir","Newton","Boolean"] >>> for name in person_list: ... print name ... qiwsir Newton Boolean
那么,dict是不是也可以用for语句来循环访问呢?当然可以,来看例子:
>>> person {'name2': 'qiwsir', 'name': 'qiwsir', 'language': 'python', 'site': 'qiwsir.github.io'} >>> for key in person: ... print person[key] ... qiwsir qiwsir python qiwsir.github.io
知识
什么是关联数组?以下解释来自维基百科
在计算机科学中,关联数组(英语:Associative Array),又称映射(Map)、字典(Dictionary)是一个抽象的数据结构,它包含着类似于(键,值)的有序对。一个关联数组中的有序对可以重复(如C++中的multimap)也可以不重复(如C++中的map)。
这种数据结构包含以下几种常见的操作:
1.向关联数组添加配对
2.从关联数组内删除配对
3.修改关联数组内的配对
4.根据已知的键寻找配对
字典问题是设计一种能够具备关联数组特性的数据结构。解决字典问题的常用方法,是利用散列表,但有些情况下,也可以直接使用有地址的数组,或二叉树,和其他结构。
许多程序设计语言内置基本的数据类型,提供对关联数组的支持。而Content-addressable memory则是硬件层面上实现对关联数组的支持。
什么是哈希表?关于哈希表的叙述比较多,这里仅仅截取了概念描述,更多的可以到维基百科上阅读。
散列表(Hash table,也叫哈希表),是根据关键字(Key value)而直接访问在内存存储位置的数据结构。也就是说,它通过把键值通过一个函数的计算,映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。