この記事はPythonのバージョン3.7.Xには、この記事を読む前にPythonの辞書の基本的な使用方法を理解する必要があります。
入門
ディクショナリ(辞書)がPythonのデータ構造に組み込まれて、キーと値のペア複数の鍵(キー)と値(値)(、)、コロンで区切られ、各キーにカンマで全体辞書を分離({})を含む、キーが一意である必要があり、そして括弧内の値の任意の型を取ることができるが、キーは、文字列、数値、またはタプルとして不変タイプでなければなりません。
キーと値を関連付けるために使用されるハッシュテーブルの基礎となる、辞書が乱れています。特長は次のとおりです。
- 検索と高速を挿入し、キーが鈍化増加しません。
- より多くのメモリを取る必要があります
だから、辞書はすぐに必要なシーンを検索するために使用される時間データ構造のための貿易のスペースです。
オペレーティング
一般的な方法
取得する()
戻り値指定されたキーの値、キーは、デフォルト値存在しない場合(デフォルトはNoneです)構文dict.get(キー)、エラーなしで、返されます。
dict_1['age'] = 24
In [7]: print(dict_1.get('age'))
24
In [11]: print(dict_1.get('nama'))
None
In [12]: print(dict_1['nama'])
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-12-ef61a380920e> in <module>
----> 1 print(dict_1['nama'])
KeyError: 'nama'
辞書内のキー
それ以外の場合はFalseを返す、キーはtrueを返しますがあり、辞書に存在するかどうかを判断するためにオペレータに使用し、構文は次のとおりです。辞書でキー。
In [15]: dict_1
Out[15]: {'name': None, 'age': 24, 'sex': None}
In [16]: print('name' in dict_1)
True
In [17]: print('nama' in dict_1)
False
この関数はhas_keyにパイソン2()メソッドが使用されます。
項目()
リターンがリスト形式を横断することができる(キー、値)タプル配列構文がdict.itemsです()。
In [18]: dict_1
Out[18]: {'name': None, 'age': 24, 'sex': None}
In [19]: print(dict_1.items())
dict_items([('name', None), ('age', 24), ('sex', None)])
In [20]: for key, value in dict_1.items():
...: print(key, value)
...:
name None
age 24
sex None
キー()
すべての辞書のキーのリストを返すには:dict.keysを()
In [21]: dict_1
Out[21]: {'name': None, 'age': 24, 'sex': None}
In [22]: print(dict_1.keys())
dict_keys(['name', 'age', 'sex'])
値()
リスト形式で返された辞書のすべての値:dict.values()
In [27]: dict_1
Out[27]: {'name': None, 'age': 24, 'sex': None, 'sub_name': 'Tony'}
In [28]: print(dict_1.values())
dict_values([None, 24, None, 'Tony'])
SetDefault()
そして同様に、ユーザが違いに関連付けられた値を持つトップに取得)(取得するキーはデフォルト値に存在しない場合は、この方法は、キーと値を追加することで、構文は次のとおりです。dict.setdefault(キー、デフォルト=なし)。
In [23]: dict_1
Out[23]: {'name': None, 'age': 24, 'sex': None}
In [24]: print(dict_1.setdefault('name'))
None
In [25]: print(dict_1.setdefault('name', 'Tony'))
None
In [26]: print(dict_1.setdefault('sub_name', 'Tony'))
Tony
In [27]: dict_1
Out[27]: {'name': None, 'age': 24, 'sex': None, 'sub_name': 'Tony'}
更新()
構文は次のとおりです。同じキーがカバーされる場合は、キー値dict_2のdict_1を更新するために使用dict_1.update(dict_2)、。
In [31]: dict_1
Out[31]: {'name': None, 'age': 24, 'sex': None, 'sub_name': 'Tony'}
In [32]: dict_2
Out[32]: {'name': 'Mary', 'age': 18, 'sex': None, 'sub_name': ''}
In [33]: dict_1.update(dict_2)
In [34]: dict_1
Out[34]: {'name': 'Mary', 'age': 18, 'sex': None, 'sub_name': ''}
クリア()
、辞書に例えばdict.clearを()、すべてのエントリを削除します。
In [1]: dict_1 = dict(name="Tony", age=24)
In [2]: dict_2 = dict_1
In [3]: print(dict_2)
{'name': 'Tony', 'age': 24}
In [4]: dict_2.clear()
In [5]: dict_2
Out[5]: {}
In [6]: dict_1
Out[6]: {}
コピー()
元の辞書の浅いコピー、新しいキーと値のペアは、例えば同じ、dict.copy()を有する辞書戻ります。
In [1]: dict_1 = dict(name='Tony', info=['boy', 24])
In [2]: dict_3 = dict_1.copy()
In [3]: dict_3['name'] = "Ring"
In [4]: dict_3['info'].remove('boy')
In [5]: dict_3
Out[5]: {'name': 'Ring', 'info': [24]}
In [6]: dict_1
Out[6]: {'name': 'Tony', 'info': [24]}
fromkeys()
新しい辞書を作成し、dict.fromkeys(配列[値])、要素配列辞書キーのシーケンスを作成するには、値は、Noneにデフォルトオプションであることを特徴とする請求辞書初期値の値に対応するすべてのキー。データ初期化するのに適した、例えば:
In [1]: info = ['name', 'age', 'sex']
In [2]: dict_1 = dict.fromkeys(info)
In [3]: dict_1
Out[3]: {'name': None, 'age': None, 'sex': None}
共通操作
マージ辞書
4つの方法があります。
- 従来の治療
In [15]: dict_1
Out[15]: {'Tony': 24}
In [16]: dict_2
Out[16]: {'ben': 18}
In [17]: dict3 = dict()
In [18]: for key, value in dict_1.items():
...: dict_3[key] = value
...:
In [19]: for key, value in dict_2.items():
...: dict_3[key] = value
...:
In [20]: dict_3
Out[20]: {'Tony': 24, 'ben': 18}
- 更新()
In [9]: dict_1
Out[9]: {'Tony': 24}
In [10]: dict_2
Out[10]: {'ben': 18}
In [12]: dict_3 = dict_1.copy()
In [13]: dict_3.update(dict_2)
In [14]: dict_3
Out[14]: {'Tony': 24, 'ben': 18}
- 辞書手段の辞書(D1、D2 **)メソッド
In [33]: dict_1
Out[33]: {'Tony': 24}
In [34]: dict_2
Out[34]: {'ben': 18}
In [35]: dict_3 = dict(dict_1, **dict_2)
In [36]: dict_3
Out[36]: {'Tony': 24, 'ben': 18}
高度
辞書の導出
そして、同様のタイプのリストを導出し、基礎となるC実装の利点は、はるかに速く、推奨されるだろう。
辞書のキーを交換します
導出は簡単にキーと値のペアの辞書のための辞書を使用することができます。
In [42]: dict_4
Out[42]: {24: 'Tony', 18: 'ben'}
In [43]: dict_3
Out[43]: {'Tony': 24, 'ben': 18}
In [44]: dict_4 = {k:v for v, k in dict_3.items()}
In [45]: dict_4
Out[45]: {24: 'Tony', 18: 'ben'}
辞書からサブセットを抽出
私は、それ自体が別の辞書のサブセットである辞書を作成したいです。
例えば:
In [88]: a = {'Ben': 18, 'Jack': 12, 'Ring': 23, 'Tony': 24}
In [89]: b = {k:v for k, v in a.items() if v > 18}
In [90]: b
Out[90]: {'Ring': 23, 'Tony': 24}
注文した辞書を生成します
辞書によるとPython3.6辞書は順不同ですが、時には我々はorderDictの順序は、ここで整然とした上の辞書辞書に基づいて達成することができ、整然とした辞書を維持するために必要なキーの挿入することを意味する前にそのdictの容量制限を超えているFIFOを達成するために、順番に配置された、最古のは、削除キーを追加しました。
例えば:
In [49]: from collections import OrderedDict
In [50]: ordered_dict = OrderedDict([('a', 2), ('b', 4), ('c', 5)])
In [51]: for key, value in ordered_dict.items():
...: print(key, value)
...:
a 2
b 4
c 5
私たちは、辞書のようなものを作成するために合わせて挿入することOrderedDictを見ることができます。
原理:内部OrderedDictは、それはまた、OrderedDictの大きさは通常の辞書よりも2倍以上である原因となる重要な要素を、配置するために参加する二重リンクリストを保持しています。
キー同じ辞書の組み合わせ一覧
多値必要が一意確保するかどうかに応じて、そのようなリストまたはセットのような他のコンテナに対応する複数の値に格納する、いわゆる多値辞書ニーズを生成するためのキーです。
例えば:
In [64]: from collections import defaultdict
In [65]: a = [{'a': 1}, {'b': 3}, {'c': 4}, {'a':5}, {'b':2}, {'b': 4}]
In [66]: b = defaultdict(list)
In [67]: [b[k].append(v) for item in a for k, v in item.items()]
Out[67]: [None, None, None, None, None, None]
In [68]: b
Out[68]: defaultdict(list, {'a': [1, 5], 'b': [3, 2, 4], 'c': [4]})
In [69]: b['a']
Out[69]: [1, 5]
2つの辞書の類似点と相違点を探し
シーン:同じまたは同一のキー値を含む2つの辞書、違いを見つけます。
分析:辞書キーの一連のセットの間のマッピングであり、以下の特徴を有します。
- キー()は、辞書内のすべてのキーを返し、辞書は、辞書処理にキーアップクロスセットを使用して操作のキーセットをサポートすることです。
- オブジェクトから構成アイテム()戻り値(キー、値)、操作のコレクションをサポートします。
- 値は()すべての値が一意であるという保証がないため、集合演算をサポートしていませんが、あなたが操作を判断する必要がある場合は、最初に達成するための値のセットに変換することができます。
例えば:
In [78]: a = {'a':1, 'b':2, 'c':3}
In [79]: b = {'b':3, 'c':3, 'd':4}
In [80]: a.keys() & b.keys()
Out[80]: {'b', 'c'}
In [81]: a.keys() - b.keys()
Out[81]: {'a'}
In [82]: a.items() & b.items()
Out[82]: {('c', 3)}
あなたは辞書を作成するときに別の例として、あなたは、特定のキーの期待を削除することができます。
In [85]: a
Out[85]: {'a': 1, 'b': 2, 'c': 3}
In [86]: c = {k: a[key] for k in a.keys() - {'b'}}
In [87]: c
Out[87]: {'a': 3, 'c': 3}
上記。