一文弄懂Python字典的使用

Python是一门广泛应用于数据分析、机器学习等领域的语言,而字典作为Python中最常用的数据类型之一,也被广泛使用。本文将详细介绍Python字典的相关知识点,包括字典的基础用法、高级用法、原理、优缺点、性能评估、使用场景、小技巧等等。

什么是字典?


在Python中,字典是一种可变容器模型,且可存储任意类型的对象。字典是由键和对应的值组成的映射关系。其中,键必须是唯一的、不可变的类型(如字符串、整数等),而值可以是任意类型的对象。在字典中,每个键和值都是通过冒号(:)进行分隔。多个键值对则使用逗号(,)进行分隔,而整个字典则使用花括号({})括起来。

字典的全部使用方法


1.创建字典

我们可以使用下面的语法创建一个空字典:

my_dict = {}

如果需要初始化一个非空字典,可以按照以下格式进行操作:

my_dict = {key1:value1, key2:value2, key3:value3, ...}

2.访问字典

可以通过给定键来访问字典中的元素:

my_dict[key]

其中,key为要访问的键。

3.修改字典

可以通过给定键来修改字典中的元素:

my_dict[key] = new_value

其中,key为要修改的键,new_value为新值。

4.删除字典

可以使用del命令从字典中删除指定的元素:

del my_dict[key]

其中,key为要删除的键。

5.遍历字典

可以使用for循环遍历字典中的所有键值对:

for key, value in my_dict.items():
    # do something with key and value

该语句将依次访问字典中的每个键值对,并将其赋值给key和value。在循环的代码块中,可以使用这两个变量进行相应的操作。

6.字典的长度

可以使用len()函数来获取字典中键值对的数量:

len(my_dict)

7.清空字典

可以使用clear()方法来清空字典中的所有元素:

my_dict.clear()

字典的基础用法


创建字典


在Python中,我们可以通过直接将一个花括号{}赋值给变量来创建一个空字典:

my_dict = {}

也可以在创建字典时直接定义键值对:

my_dict = {'name': 'Tom', 'age': 20}

访问字典元素


在Python中,我们可以通过给定键来访问字典中的元素:

my_dict['name']

如果我们使用了一个不存在的键,则会发生KeyError异常。

修改字典元素


在Python中,我们可以通过给定键来修改字典中的元素:

my_dict['name'] = 'Jack'

该语句将把键为'name'的值从'Tom'修改为'Jack'。

删除字典元素


Python では、del コマンドを使用して、辞書から指定した要素を削除できます。

del my_dict['name']

このステートメントは、キー「name」を持つキーと値のペアを辞書から削除します。

辞書を反復処理する


Python では、for ループを使用して辞書内のすべてのキーと値のペアを反復処理できます。

for key, value in my_dict.items():
    print(key, ':', value)

このステートメントは、ディクショナリ内の各キーと値のペアを順番に参照し、キーと値に割り当てます。キーと値のペアごとに、キーと値が出力されます。

辞書の長さ


Python では、len() 関数を使用して、辞書内のキーと値のペアの数を取得できます。

print(len(my_dict))

このステートメントは、辞書内のキーと値のペアの数を出力します。

空の辞書


Python では、clear() メソッドを使用して、辞書内のすべての要素をクリアできます。

my_dict.clear()

このステートメントは、辞書内のすべての要素をクリアします。

辞書の高度な使い方


辞書の理解力


Python では、辞書内包表記を使用して新しい辞書を作成できます。たとえば、リストを辞書に変換するには、次のようにします。

my_list = [('name', 'Tom'), ('age', 20)]
my_dict = {key: value for key, value in my_list}

このステートメントは、キー「name」と「age」、および対応する値「Tom」と「20」をそれぞれ含む新しい辞書を作成します。

辞書の入れ子


Python では、辞書を別の辞書の値として使用できます。例えば:

my_dict = {'person': {'name':'Tom', 'age':20}}

このステートメントは、「person」がキーであり、その値が 2 つのキーと値のペア「name」と「age」を含む辞書を作成します。

辞書のソート


Python では、辞書は順序付けされていませんが、sorted() 関数を使用してキーまたは値で並べ替えることができます。

my_dict = {'name': 'Tom', 'age': 20}
# 按键排序
sorted_dict_key = {key: my_dict[key] for key in sorted(my_dict.keys())}
# 按值排序
sorted_dict_value = {key: value for key, value in sorted(my_dict.items(), key=lambda x: x[1])}

上記のコードは、キーと値でそれぞれ辞書を並べ替え、並べ替えられた新しい辞書を作成します。

辞書のマージ


Python では、update() メソッドを使用して、ある辞書を別の辞書にマージできます。

my_dict = {'name': 'Tom', 'age': 20}
other_dict = {'country': 'China', 'city': 'Beijing'}
my_dict.update(other_dict)

このステートメントは、2 つのキーと値のペア「country」と「city」を my_dict 辞書に追加します。

辞書の関数適用


Python では、map() や filter() などの関数を使用して、辞書内の要素を操作できます。たとえば、辞書内のすべての整数値を二乗するには、次のようにします。

my_dict = {'a': 1, 'b': 2, 'c': 3}
new_dict = {key: value**2 for key, value in my_dict.items() if isinstance(value, int)}

上記のコードは、元の辞書内の整数のキーと値のペアのみを含む新しい辞書を作成し、値を 2 乗します。

辞書の原理


Python では、辞書はハッシュ テーブルとして実装されます。ハッシュ テーブルは、キーに従って値にアクセスするデータ構造です。内部にハッシュ関数が実装されています。この関数は、キーからハッシュ値をすばやく計算し、そのハッシュ値を使用して対応する値を見つけます。

Pythonではハッシュテーブルはハッシュテーブル(Hash Table)と呼ばれる配列で実装されます。各ハッシュ テーブル エントリには 2 つの部分があり、1 つはキー (Key)、もう 1 つは値 (Value) です。プログラムがキーと値のペアを保存しようとすると、Python はまずキーを通じてハッシュ値を計算し、次にそれを添え字として使用して、ハッシュ テーブル内の対応する値を見つけます。場所が占有されていない場合、キーと値のペアは直接保存されます。場所がすでに占有されている場合、衝突 (Collision) が発生し、衝突を解決するには特定の戦略 (切り離しリンク、線形検出など) を使用する必要があります。

辞書のメリットとデメリット


Python で最も一般的に使用されるデータ型の 1 つである辞書には、次のような利点と欠点があります。

アドバンテージ


1. 高い柔軟性: 辞書はあらゆる種類のオブジェクトを格納でき、要素の動的な追加、削除、変更をサポートします。

2. 高速なクエリ速度: 辞書は内部的にハッシュ テーブルを使用して実装されており、キーを通じてハッシュ値が計算された後、対応する値を非常に迅速に検索できます。

3. 優れた可読性: 辞書のキーと値の構造は明瞭で明確で、理解と操作が簡単です。

欠点がある


1. メモリ消費量が大きい:辞書内でハッシュテーブルが使用されるため、ハッシュ値やリンクリストなどの情報を格納するために追加のメモリが必要となるため、辞書のメモリ消費量が比較的大きくなります。

2. 順序性がない: 辞書には順序がないため、インデックスによってアクセスすることができず、場合によっては不便になる可能性があります。

辞書の性能評価


Python で最も一般的に使用されるデータ型の 1 つである辞書は、そのパフォーマンスに関しても大きな注目を集めています。このセクションでは、辞書のパフォーマンスを評価します。

辞書を作成する


空の辞書を作成します。

複雑さ スピード
平均的なケース ○(1)
最悪の場合 の上)

空ではない辞書を作成します。

複雑さ スピード
平均的なケース の上)
最悪の場合 の上)

辞書要素へのアクセス、変更、削除


辞書要素へのアクセス、変更、削除の複雑さは次のとおりです。

複雑さ スピード
平均的なケース ○(1)
最悪の場合 の上)

Python はハッシュ テーブルを使用して辞書を実装するため、この複雑さは非常に高速です。

辞書を反復処理する


辞書を走査するには、O(n) 時間の複雑さが必要です。ディクショナリを反復処理する場合、各キーを検索してから、対応する値にアクセスする必要があります。辞書には順序がないため、走査中のキーの順序は定義されません。

辞書のソート


Python では、キーまたは値による辞書のソート速度はソート アルゴリズムに関係します。O(nlogn) アルゴリズムを使用すると、比較的遅くなります。カウンティングソートなどの O(n) アルゴリズムを使用すると、比較的高速になります。

辞書のマージ


辞書を結合する複雑さは O(m+n) です。ここで、m と n はそれぞれ 2 つの辞書のサイズです。複雑さは 2 つの辞書のサイズに関係します。

辞書の利用シーン


Python で最も一般的に使用されるデータ型の 1 つである辞書は、幅広いシナリオで使用されます。一般的な使用シナリオをいくつか示します。

1. 構成ファイル: 構成ファイル内のキーと値のペアを辞書に保存し、必要に応じてアクセスして変更します。

2. データベースの結果セット: データベースの結果セットをディクショナリに保存し、必要に応じてクエリとフィルターを実行します。

3. キャッシュ システム: キーと値のペアをキャッシュ内のディクショナリに保存し、迅速なクエリと変更を可能にします。

4. ログ ファイル: ログ ファイル内の関連情報を辞書に保存します。これは、分類や統計分析に便利です。

5. コマンド ライン パラメータの解析: コマンド ライン パラメータを辞書形式に変換して、後続の処理を容易にします。

辞書に関するヒント

1. ディクショナリに存在しないキーを取得する場合、setdefault() メソッドを使用してデフォルト値を設定できます。

my_dict = {'name': 'Tom', 'age': 20}
my_dict.setdefault('country', 'China')

このステートメントは、辞書に「country」キーが存在するかどうかを確認し、存在しない場合はキーを追加し、値を「China」に設定します。

2. デフォルト値 0 の辞書は、コレクション モジュールのdefaultdict クラスを通じて作成できます。

from collections import defaultdict
my_dict = defaultdict(int)

上記のコードは、デフォルト値 0 の辞書を作成します。

3. get() メソッドを使用して辞書内の要素を取得し、要素が存在しない場合は None または指定されたデフォルト値を返します。

my_dict = {'name': 'Tom', 'age': 20}
value = my_dict.get('country', 'Unknown')

このステートメントは、「country」キーに対応する値へのアクセスを試みます。キーが存在しない場合は、デフォルト値「Unknown」が返されます。

4. Dict Unpacking を使用すると、辞書を複数の変数に簡単に分割できます。

my_dict = {'name': 'Tom', 'age': 20}
name, age = my_dict.values()

上記のコードは、辞書内の「name」キーと「age」キーに対応する値を 2 つの変数 name と age に割り当てます。

5. ディクショナリの Popitem() メソッドを使用して、ディクショナリ内のキーと値のペアをランダムに削除して返すことができます。

my_dict = {'name': 'Tom', 'age': 20}
key, value = my_dict.popitem()

上記のコードは、キーと値のペアをランダムに削除して返し、それをキー変数と値変数に割り当てます。

結論は


要約すると、Python で最も一般的に使用されるデータ型の 1 つである辞書には、高い柔軟性、高速なクエリ速度、優れた可読性という利点があります。同時に、大量のメモリ消費と混乱という欠点があるため、辞書を使用する際には対応する問題に注意を払う必要があります。さまざまなアプリケーション シナリオに対して、辞書のさまざまな高度な使用法を使用して、対応する要件を達成できます。

Guess you like

Origin blog.csdn.net/weixin_40025666/article/details/131337987