ホームページ > バックエンド開発 > Python チュートリアル > 知っておくべきPython辞書の使い方

知っておくべきPython辞書の使い方

angryTom
リリース: 2019-11-28 17:12:15
転載
2978 人が閲覧しました

この記事の Python バージョンは 3.7.X です。この記事を読む前に、Python 辞書の基本的な使い方を理解する必要があります。

知っておくべきPython辞書の使い方

はじめに

辞書 (dict) は Python の組み込みデータ構造であり、複数のキーと値のペアで構成されます。 . (キー) と値 (値) はコロンで区切られ、各キーと値のペアはカンマ (,) で区切られ、辞書全体が中括弧 ({}) で囲まれ、キーは一意である必要があり、値は次のように指定できます。ただし、キーは文字列、数値、タプルなどの不変型である必要があります。

推奨: 「Python チュートリアル #」

最下層はハッシュ テーブルを使用して、キーと値を関連付け、dict は順序付けされていません。

##● 検索と挿入の速度が非常に速く、キーの数が増えても速度が低下しません。

##● より多くのメモリが必要です。

したがって、dictは、空間と時間を交換するデータ構造であり、高速検索が必要なシナリオで使用されます。

操作: 一般的なメソッド

get()

指定されたキーの値を返します。キーが存在しない場合は、デフォルト値を返します。 (デフォルトは None ) エラーを報告しない場合、構文は dict.get(key) です。

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[&#39;nama&#39;])
KeyError: &#39;nama&#39;
ログイン後にコピー

key in dict

in 演算子を使用して、キーが辞書に存在するかどうかを確認します。存在する場合は True を返し、存在しない場合は False を返します。構文は次のとおりです: key in dict 。

In [15]: dict_1
Out[15]: {&#39;name&#39;: None, &#39;age&#39;: 24, &#39;sex&#39;: None}
In [16]: print(&#39;name&#39; in dict_1)
True
In [17]: print(&#39;nama&#39; in dict_1)
False
ログイン後にコピー

Python 2 では、この関数は has_key() メソッドを使用して実装されます。

items()

走査可能な (キー、値) タプル配列をリスト形式で返します。構文は dict.items() です。

In [18]: dict_1
Out[18]: {&#39;name&#39;: None, &#39;age&#39;: 24, &#39;sex&#39;: None}
In [19]: print(dict_1.items())
dict_items([(&#39;name&#39;, None), (&#39;age&#39;, 24), (&#39;sex&#39;, None)])
In [20]: for key, value in dict_1.items():
    ...:     print(key, value)
    ...:
name None
age 24
sex None
ログイン後にコピー

keys()

辞書のすべてのキーをリストとして返します: dict.keys()

In [21]: dict_1
Out[21]: {&#39;name&#39;: None, &#39;age&#39;: 24, &#39;sex&#39;: None}
In [22]: print(dict_1.keys())
dict_keys([&#39;name&#39;, &#39;age&#39;, &#39;sex&#39;])
ログイン後にコピー

values()

辞書内のすべての値をリスト形式で返します: dict.values()

In [27]: dict_1
Out[27]: {&#39;name&#39;: None, &#39;age&#39;: 24, &#39;sex&#39;: None, &#39;sub_name&#39;: &#39;Tony&#39;}
In [28]: print(dict_1.values())
dict_values([None, 24, None, &#39;Tony&#39;])
setdefault()
和get()类似,用户获得与给顶尖相关联的值,不同的是,该方法如果键不存在时会添加键并将值设为默认值,语法为:dict.setdefault(key, default=None)。
In [23]: dict_1
Out[23]: {&#39;name&#39;: None, &#39;age&#39;: 24, &#39;sex&#39;: None}
In [24]: print(dict_1.setdefault(&#39;name&#39;))
None
In [25]: print(dict_1.setdefault(&#39;name&#39;, &#39;Tony&#39;))
None
In [26]: print(dict_1.setdefault(&#39;sub_name&#39;, &#39;Tony&#39;))
Tony
In [27]: dict_1
Out[27]: {&#39;name&#39;: None, &#39;age&#39;: 24, &#39;sex&#39;: None, &#39;sub_name&#39;: &#39;Tony&#39;}
ログイン後にコピー

update()

構文は: dict_1. update(dict_2) は、dict_2 のキーと値のペアを dict_1 に更新するために使用されます。同じキーが存在する場合、それらは上書きされます。

In [31]: dict_1
Out[31]: {&#39;name&#39;: None, &#39;age&#39;: 24, &#39;sex&#39;: None, &#39;sub_name&#39;: &#39;Tony&#39;}
In [32]: dict_2
Out[32]: {&#39;name&#39;: &#39;Mary&#39;, &#39;age&#39;: 18, &#39;sex&#39;: None, &#39;sub_name&#39;: &#39;&#39;}
In [33]: dict_1.update(dict_2)
In [34]: dict_1
Out[34]: {&#39;name&#39;: &#39;Mary&#39;, &#39;age&#39;: 18, &#39;sex&#39;: None, &#39;sub_name&#39;: &#39;&#39;}
ログイン後にコピー

clear()

辞書内のすべての項目を削除します (dict.clear())。例:

In [1]: dict_1 = dict(name="Tony", age=24)
In [2]: dict_2 = dict_1
In [3]: print(dict_2)
{&#39;name&#39;: &#39;Tony&#39;, &#39;age&#39;: 24}
In [4]: dict_2.clear()
In [5]: dict_2
Out[5]: {}
In [6]: dict_1
Out[6]: {}
ログイン後にコピー

copy ( )

元の辞書の浅いコピー。同じキーと値のペアを持つ新しい辞書、dict.copy() を返します。例:

In [1]: dict_1 = dict(name=&#39;Tony&#39;, info=[&#39;boy&#39;, 24])
In [2]: dict_3 = dict_1.copy()
In [3]: dict_3[&#39;name&#39;] = "Ring"
In [4]: dict_3[&#39;info&#39;].remove(&#39;boy&#39;)
In [5]: dict_3
Out[5]: {&#39;name&#39;: &#39;Ring&#39;, &#39;info&#39;: [24]}
In [6]: dict_1
Out[6]: {&#39;name&#39;: &#39;Tony&#39;, &#39;info&#39;: [24]}
ログイン後にコピー

fromkeys( )

シーケンス seq 内の要素を辞書のキーとして使用して、新しい辞書 dict.fromkeys(seq[, value]) を作成します。value はすべてのキーに対応する初期値です。ディクショナリ内で、値は選択パラメータであり、デフォルトはなしです。データの初期化に適しています。例:

In [1]: info = [&#39;name&#39;, &#39;age&#39;, &#39;sex&#39;]
In [2]: dict_1 = dict.fromkeys(info)
In [3]: dict_1
Out[3]: {&#39;name&#39;: None, &#39;age&#39;: None, &#39;sex&#39;: None}
ログイン後にコピー

一般的な操作

辞書のマージ

方法は 4 つあります:

一般的な処理

In [15]: dict_1
Out[15]: {&#39;Tony&#39;: 24}
In [16]: dict_2
Out[16]: {&#39;ben&#39;: 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]: {&#39;Tony&#39;: 24, &#39;ben&#39;: 18}
ログイン後にコピー

update()

In [9]: dict_1
Out[9]: {&#39;Tony&#39;: 24}
In [10]: dict_2
Out[10]: {&#39;ben&#39;: 18}
In [12]: dict_3 = dict_1.copy()
In [13]: dict_3.update(dict_2)
In [14]: dict_3
Out[14]: {&#39;Tony&#39;: 24, &#39;ben&#39;: 18}
ログイン後にコピー

Dict(d1, **d2) の助けを借りてDictionary メソッド

In [33]: dict_1
Out[33]: {&#39;Tony&#39;: 24}
In [34]: dict_2
Out[34]: {&#39;ben&#39;: 18}
In [35]: dict_3 = dict(dict_1, **dict_2)
In [36]: dict_3
Out[36]: {&#39;Tony&#39;: 24, &#39;ben&#39;: 18}
ログイン後にコピー

Advanced

辞書導出

はリスト導出と似ていますが、次のような利点があります。最下位レベルの C 実装で使用すると、はるかに高速になるため、推奨されます。

辞書のキー値を交換する

辞書内包表記を使用して、辞書のキー値を簡単に交換します:

In [42]: dict_4
Out[42]: {24: &#39;Tony&#39;, 18: &#39;ben&#39;}
In [43]: dict_3
Out[43]: {&#39;Tony&#39;: 24, &#39;ben&#39;: 18}
In [44]: dict_4 = {k:v for v, k in dict_3.items()}
In [45]: dict_4
Out[45]: {24: &#39;Tony&#39;, 18: &#39;ben&#39;}
ログイン後にコピー

辞書から

からサブセットを抽出する 別の辞書のサブセットである辞書を作成したいと考えています。

例:

In [88]: a = {&#39;Ben&#39;: 18, &#39;Jack&#39;: 12, &#39;Ring&#39;: 23, &#39;Tony&#39;: 24}
In [89]: b = {k:v for k, v in a.items() if v > 18}
In [90]: b
Out[90]: {&#39;Ring&#39;: 23, &#39;Tony&#39;: 24}
ログイン後にコピー

順序付き辞書を生成する

Python3.6 より前の辞書は順序付けされていませんが、場合によっては、辞書の順序性を維持する必要があります。 Dictionary, orderDict は dict に基づいて辞書の順序性を実現できます. ここでの order とは辞書のキーが挿入された順に並べることを指します. これにより先入れ先出しの dict が実現されます.制限を超えると、最も早く追加されたキーが最初に削除されます。

例:

In [49]: from collections import OrderedDict
In [50]: ordered_dict = OrderedDict([(&#39;a&#39;, 2), (&#39;b&#39;, 4), (&#39;c&#39;, 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 = [{&#39;a&#39;: 1}, {&#39;b&#39;: 3}, {&#39;c&#39;: 4}, {&#39;a&#39;:5}, {&#39;b&#39;:2}, {&#39;b&#39;: 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, {&#39;a&#39;: [1, 5], &#39;b&#39;: [3, 2, 4], &#39;c&#39;: [4]})
In [69]: b[&#39;a&#39;]
Out[69]: [1, 5]
ログイン後にコピー

2 つの辞書間の類似点と相違点を見つける

シナリオ: 同じ辞書を含む 2 つの辞書間の類似点と相違点を見つけます。キーまたは同じ値。

分析: 辞書は、一連のキー値間のマッピング セットです。次の特性があります:

keys() は、辞書内のすべてのキーと辞書のキーを返します。セット操作をサポートしているため、セットの共通部分と補数を使用して辞書のキーを処理できます。

items() は、(キー, 値) で構成されるオブジェクトを返し、セット操作をサポートします。

values() および Set 操作は、すべての値が一意であるという保証がないためサポートされていませんが、判定操作が必要な場合は、最初に値をセットに変換できます。

例:

In [78]: a = {&#39;a&#39;:1, &#39;b&#39;:2, &#39;c&#39;:3}
In [79]: b = {&#39;b&#39;:3, &#39;c&#39;:3, &#39;d&#39;:4}
In [80]: a.keys() & b.keys()
Out[80]: {&#39;b&#39;, &#39;c&#39;}
In [81]: a.keys() - b.keys()
Out[81]: {&#39;a&#39;}
In [82]: a.items() & b.items()
Out[82]: {(&#39;c&#39;, 3)}
ログイン後にコピー

別の例として、辞書を作成するときに、特定のキーを削除できることが期待されます:

In [85]: a
Out[85]: {&#39;a&#39;: 1, &#39;b&#39;: 2, &#39;c&#39;: 3}
In [86]: c = {k: a[key] for k in a.keys() - {&#39;b&#39;}}
In [87]: c
Out[87]: {&#39;a&#39;: 3, &#39;c&#39;: 3}
ログイン後にコピー

この記事は、

python チュートリアル#から引用しています。 ## コラム、学習へようこそ!

以上が知っておくべきPython辞書の使い方の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:cnblogs.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート