1. ホーム
  2. Python

Python辞書

2022-02-14 21:32:20

1 基本的な定義

Pythonの辞書は、連想配列やハッシュテーブルとしても知られています。辞書の一般的な構文は以下の通りです。

dict = {'Alice': '2341', 'Beth': '9102', 'Cecil': '3258'}



























辞書の値はどのような型でもよいが、キーは文字列、数値、タプルのような不変のデータ型でなければならない。

2 辞書への新しい要素の追加または修正

#! /usr/bin/python
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
dict['Age'] = 8; # 既存のエントリを更新する
dict['School'] = "DPS School"; # 新しいエントリを追加する
print ("dict['Age']: ", dict['Age']);
print ("dict['School']: ", dict['School']);

3 要素の削除
dict = {'Name': 'Zara', 'Age': 7, 'Class': 'First'};
del dict['Name']; # キー'Name'を持つエントリーを削除します。
dict.clear(); # dict のすべてのエントリを削除します。
del dict ; # 辞書全体を削除する

4 こんな感じで2点。

(a) 1つのキーに複数のエントリを作成することはできません。つまり、キーの重複は許されないということです。割り当て中に重複したキーが発生した場合、最後に割り当てられたキーが優先される。 割り当て中に重複したキーが発生した場合、最後に割り当てられたキーが優先される。

<スパン 例

<テーブル
#! /usr/bin/python



























dict = {'Name': 'Zara', 'Age': 7, 'Name': 'Manni'};



























print "dict['Name']: ", dict['Name'];















dict['Name']: Manni
#! /usr/bin/python dict = {['Name']: 'Zara', 'Age': 7}; print "dict['Name']: ", dict['Name'];

すると、次のような結果になります。

<テーブル
dict['Name']: Manni


(b) キーは不変でなければなりません。つまり、文字列、数値、タプルを辞書のキーとして使用することはできますが、['key']のようなものは許されません。

<スパン 例

#! /usr/bin/python


dict = {['Name']: 'Zara', 'Age': 7};
print "dict['Name']: ", dict['Name'];

5 関連機能

Pythonには以下の辞書関数があります。

<テーブル SN 機能(説明付き 1 cmp(dict1, dict2)
両方のdictの要素を比較する。 2 len(dict)
辞書の全長を示す。これは、辞書の項目数と同じになる。 3 str(ディクショナリー)
辞書の印刷可能な文字列表現を生成する 4 型(変数)
渡された変数の型を返します。渡された変数がdictionaryの場合、dictionaryの型を返します。

Pythonには以下の辞書メソッドがあります。

<テーブル SN メソッドとその説明 1 dict.clear()
辞書のすべての要素を削除します。 ディクショナリー 2 dict.copy()
辞書の浅いコピーを返します。 ディクト 2 dict.fromkeys()
seq をキーとし、値を持つ新しい辞書を作成します。 セット から . 3 dict.get(キー, default=None)
について キー キーが辞書にない場合、値またはデフォルトを返します。 4 dict.has_key(キー)
リターン ディクショナリにキーがある場合 ディクショナリー , 虚偽 その他 5 dict.items()
のリストを返します。 ディクショナリ の(キー、値)タプルのペアを作成します。 6 dict.keys()
辞書dictのキーのリストを返します。 7 dict.setdefault(key, default=None)
get() と似ていますが、以下の場合は dict[key]=default に設定されます。 キー がまだdictにない場合 8 dict.update(dict2)
辞書を追加する ディクト2 のキーバリューのペアを ディクト 9 dict.values()
辞書のリストを返す ディクショナリー2 の値

追加です。

存在しないキーで値にアクセスするとkeyerror例外が発生します。存在しない場合はNoneを返すget(key[,obj])でアクセスできます。

ポピテム
popitem はランダムなアイテムをポップアップ表示します。
>>> d ={'title':'Python Web Site','url':'http://www.python.org','spam':0}.
>>> d.popitem()
('url', 'http://www.python.org')
>>> d
{'spam': 0, 'title': 'Python Web Site' }.

Pythonのリファレンス。

Pythonはあらゆるデータの断片をオブジェクトに格納し、変数はオブジェクトへの単なる参照に過ぎません。

変数はオブジェクトを参照しているだけなので、ミュータブルオブジェクトの値の変化は、そのオブジェクトを参照しているすべての変数に見える。

>>> a=[1,2]です。
>>> b=a
>>> a[1]=8
>>> b
[1, 8]
>>> a = 3
>>> b = a
>>> b
3
>>>

各オブジェクトには、そのオブジェクトを現在参照している変数の数を示す参照カウントも含まれています。参照カウントがゼロになると、pythonのガベージコレクタがオブジェクトを破棄して、使用していたメモリを取り戻します。

sys.getrefcount(obj): 与えられたオブジェクトの参照カウントを返します。

del はオブジェクトではなく、変数を削除します。python は変数がオブジェクトの最後の参照である場合にのみオブジェクトを削除します。

>>> a=[1,2]です。

>>> b=a
>>> a[1]=8
>>> b
[1, 8]
>>> a = 3
>>> b = a
>>> b
3
>>> a を削除したが、a が参照しているオブジェクトは削除されていない。

>>> a = [1,2,3] です。
>>> del a
>>> a
トレースバック (最近の呼び出しの最後)。
  ファイル "<stdin>", 行 1, in <module>
NameError: 名前 'a' が定義されていません。

オブジェクト間のコピー

Pythonには浅いコピーと深いコピーの2種類があります。

浅いコピー:シャローコピー

定義 リストや他のコンテナオブジェクトのシャローコピーは、オブジェクト自体のコピーを作成しますが、リストによって含まれるオブジェクトへの参照を作成します。

浅いコピーを作成するには copy(obj) を使用します。

>>> test = [1,2,3]です。
>>> ref = test[:].
>>> ref is test

>>> ref == test

親リストの浅いコピーには、独立したコピーではなく、子リストへの参照が含まれます。その結果、内部リストへの変更は、親リストの両方のコピーから見えるようになります。

>>> myAccount = [100,['checking','saving']].
>>> youCount = myAcount
トレースバック (最も最近の呼び出し):
  ファイル "<stdin>", 行 1, in <module>
NameError: 名前 'myAcount' が定義されていません。
>>> youCount = myAcount[:] です。
トレースバック (最も最近の呼び出し):
  ファイル "<stdin>", 行 1, in <module>
NameError: 名前 'myAcount' が定義されていません。
>>> youCount = myAccount
>>> myAccount[1].remove('saving')
>>> myAccount
[100, ['checking'](チェック中)]] 。
>>> youCount
[100, ['checking'](チェック中)]] 。
>>>

ディープコピー 定義する

ディープコピーは、コンテナ・オブジェクトのコピーを作成し、再帰的にすべての子オブジェクトのコピーを作成します。

>>> myAccount = [100,['test1','test2']].
>>> yourAccount = copy.deepcopy(myAccount)です。
トレースバック (最も最近の呼び出し):
  ファイル "<stdin>", 行 1, in <module>
NameError: 名前 'copy' が定義されていません。
>>> インポートコピー
>>> yourAccount = copy.deepcopy(myAccount)です。
>>> myAccount[1].remove('test2')
>>> myAccount
[100, ['test1'] ]。
>>> yourAccount
[100, ['test1', 'test2']].

しかし、特別な注意点として、オブジェクト自体が不変である場合、浅いコピーでも2つの値が生成されます、例を見てください。

>>> aList =[1,2] です。
>>> bList = aList[:] とします。
>>> bList
[1, 2]
aList
[1, 2]
>>> aList[1]=111
>>> aList
[1, 111]
>>> bList
[1, 2]

理由は、pythonが数字を不変とみなしているからです。

変数の種類:リスト、ディクショナリー
不変の型:数値、文字列、タプル