Python辞書
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が数字を不変とみなしているからです。
変数の種類:リスト、ディクショナリー
不変の型:数値、文字列、タプル
関連
-
python socket.error: [Errno 9] 不正なファイルディスクリプタに対する解決策
-
[Django] CSRF 検証に失敗しました。
-
pythonBug:AttributeError: タイプオブジェクト 'datetime.datetime' は属性 'datetime' を持たない。
-
Pythonがエラーを報告する AttributeError:'numpy.ndarray' オブジェクトに 'index' という属性がない
-
Python3 xlsxwriterモジュールのインストール
-
pythonのstring()モジュール
-
Python3 はエンコーディングの問題を解決します: UnicodeEncodeError: 'gbk' codec can't encode character '\xa9' in position
-
idea create python project report Unresolved reference 'xxx' .... の解決策
-
Pythonの非パッケージ問題で相対インポートを試みる
-
[Python] ValueError: サポートされていない pickle プロトコルです。5 解決方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
concat を使用して 2 つのデータフレームを結合する際のエラー
-
Pythonインストールモジュールエラー AttributeError: モジュール 'pip' には 'main' という属性がありません。
-
AttributeError: モジュール 'tensorflow'に属性 'placeholder' がない問題
-
scipyという名前のモジュールがない場合の解決策|エラー
-
ImportError: scipy'という名前のモジュールがありません。
-
TypeError: 'builtin_function_or_method' オブジェクトは反復可能ではありません。
-
ValueError: 解凍に0以上の値が必要
-
float32とfloat64の本質的な違い(ディープラーニングへの型影響とpythonの活用)。
-
[解決済み] です。TypeError: read() missing 1 required positional argument: 'filename'.
-
pyinstaller パッケージ生成 .exe 実行ファイルエラー "IndexError: tuple index out of range"