Pythonディクショナリdict操作の詳細-Pythonディクショナリのソート読み取り修正レプリケーション浅いレプリケーションを作成...

12194 ワード

辞書の基本的な使い方をまとめます.内容はカタログを参照して、個人的には比較的詳細だと思います.
目次
1.辞書とは
2.辞書の作成
2.1手動で作成
2.2組み込み関数dict()を使用して作成
3.辞書要素の読み取り
3.1下付き方式読み出しValue
3.2 get()読み出しValue
3.3 keys()メソッドは「キー」を返す
3.4 values()メソッドは「値」を返します.
3.5 items()メソッドは「キー値」ペアを返します.
4.辞書要素の追加と修正
4.1下書き方式の追加と修正
4.2 update()メソッドキー値ペアの追加
4.3削除
5.キーが辞書にあるかどうかを判断する
6.秩序辞書
7.辞書のコピーと浅いコピー
8.辞書の並べ替え
8.1「キーキーキー」によるソート
8.2「値Value」によるソート
8.3 items()によるソート
8.4 operatorを借りる.itemgeter()
1.辞書とは
ディクショナリは、キー値ペアの無秩序可変シーケンスです.ディクショナリの各要素は、キーと値の2つの部分に分けることができます.辞書を定義するとき、各要素の「キー」と「値」はコロンで区切られ、隣接する要素の間はカンマで区切られ、すべての要素は括弧で囲まれた「{」と「}」の中に配置されます.辞書の「キー」は、整数、実数、複素数、文字列、メタグループなど、Pythonの任意の可変データであってもよいが、リスト、コレクション、辞書は、これらのオブジェクトが可変であるため、辞書の「キー」として使用されます.また、辞書の「キー」では繰り返しは許可されず、値は繰り返し可能です.
注意:Pythonの辞書は具体的な数、または可変シーケンスでなければなりません.例えば、Listは可変シーケンスであり、挿入削除修正操作が提供されるが、tupleはappend()、extend()、insert()のようなシーケンスを修正できる関数ではない可変シーケンスに属する.
2.辞書の作成
2.1手動で作成
等号を使用して、直接手動で辞書を作成します.
a_dict={'DXY':"19950819" , 'HJL':"19960424"}
print(a_dict)  #{'HJL': '19960424', 'DXY': '19950819'}
print(type(a_dict))  #       

2.2組み込み関数dict()を使用して作成
例:
keys=['a','b','c','d']  
#        " ",   zip  ,
values=[1,2,3,4]
dictionary=dict( zip(keys, values) )
#zip        ,  zip  ,   zip         ,        
print(dictionary)   #{'d': 4, 'b': 2, 'a': 1, 'c': 3}
print( type(dictionary ))  #

または、「キー'='値'」をdict()のパラメータとして辞書を作成します.
a_dict=dict(name='DYX' ,  age=24)  # =  
print(a_dict)  #{'age': 24, 'name': 'DYX'}

dict.fromkeys()メソッドを使用して、キーシーケンスを指定し、値が空の辞書を作成することもできます.
a_dict=dict.fromkeys( ['name','age','sex'] )
print(a_dict)  #{'sex': None, 'name': None, 'age': None}
#“ ”          ,“ ”  。

3.辞書要素の読み取り
3.1下付き方式読み出しValue
リストと同様に、辞書の要素にアクセスするには下付き文字を使用しますが、辞書の下付き文字は辞書の「キー」であり、リストとメタグループがアクセスするときは下付き文字は整数値でなければなりません.下付き文字で辞書「値」にアクセスすると、指定したキーが存在しない場合に例外が放出されます.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
print(a_dict['name'])  #DYX
#print(a_dict['tel'])  KeyError: 'tel'        

3.2 get()読み出しValue
辞書オブジェクトのget()メソッドを使用して、指定された「キー」「対応する」値を取得し、指定された「キー」が存在しない場合に指定された値を返すことができ、指定されていない場合はデフォルトでNoneを返すことができます.上記のメソッドよりも安全です.
すなわち、下付きメソッドでは、指定キーが存在しない場合に例外が投げ出され、get()メソッドでは指定値またはNoneが返されます.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
print(a_dict.get('ranking'))   #None      ranking     None
print(a_dict.get('ranking','No entry'))  #No entry         ,       No entry

3.3 keys()メソッドは「キー」を返す
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
print(a_dict.keys())    #       dict_keys(['name', 'age', 'sex'])
print(type(a_dict.keys())) #       
print(list(a_dict.keys()))  #['age', 'name', 'sex']

for key in a_dict.keys():
    print(key, end = " ")  #name sex age

旧バージョンのPython 2では、辞書オブジェクトにiterkeys()メソッドが存在し、iterkeys()は反復して表示する必要があります. 
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
print(a_dict.iterkeys())  #
print(type(a_dict.iterkeys()))  #
for key in a_dict.iterkeys():
    print key
#age
#name
#sex

3.4 values()メソッドは「値」を返します.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
print(a_dict.values())    #       dict_values(['male', 'DYX', 24])
print(type(a_dict.values())) #       
print(list(a_dict.values()))  #['male', 'DYX', 24]
#             。

for key in a_dict.values():
    print(key, end = " ")  #male DYX 24 

3.5 items()メソッドは「キー値」ペアを返します.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
print(a_dict.items())  #dict_items([('age', 24), ('name', 'DYX'), ('sex', 'male')])
print(type(a_dict.items()))  #

#       
for item in a_dict.items():
    print(item, end = " ")  #('sex', 'male') ('name', 'DYX') ('age', 24)
#    item   
print("
",type(item)) #

このように出力を反復することもできます.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
for key,values in a_dict.items():
    print(key,values) #         ,        
#age 24
#sex male
#name DYX

辞書を直接巡回する場合は、キーのみを巡回できます.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
for item in a_dict:    #     “ ”
    print(item, end = " ")  #name age sex

4.辞書要素の追加と修正
4.1下書き方式の追加と修正
[キー](Key)を下付き文字として使用する場合、このキーが存在する場合は、そのキーに対応する値を変更し、キーが存在しない場合は、新しい[キー-値](Key-Value)ペアを追加します.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
a_dict['name']="DDD"
print(a_dict)  #{'age': 24, 'sex': 'male', 'name': 'DDD'}
#     

a_dict['ranking']=15   #     ,         。
print(a_dict)   #{'ranking': 15, 'age': 24, 'name': 'DDD', 'sex': 'male'}

4.2 update()メソッドキー値ペアの追加
辞書オブジェクトのupdate()メソッドでは、別の辞書をすべて現在の辞書に追加できます.2つの辞書に同じキーがある場合は、別の辞書の値に基づいて現在の辞書を更新します.
a_dict = { 'ranking': [98, 97] ,  'age': 24 ,  'name': 'DYX' ,  'sex': 'male' }
#    “ ”     、  、       ,     
#    “ ”         、  、       “ ”
print(a_dict.items())
#dict_items([('sex', 'male'), ('age', 24), ('name', 'DYX'), ('ranking', [98, 97])])
a_dict.update( {'a':'a','b':'b'} )  
print(a_dict)  #        
#{'sex': 'male', 'age': 24, 'ranking': [98, 97], 'name': 'DYX', 'a': 'a', 'b': 'b'}

4.3削除
delコマンドは、辞書で指定したキーに対応する要素を削除します.あるいは辞書自体を削除します.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
del a_dict["name"]
print(a_dict)  #{'age': 24, 'sex': 'male'}
del a_dict
print(a_dict)  #NameError: name 'a_dict' is not defined    

辞書のclear()メソッドを使用して、辞書内のすべての要素を削除します.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
a_dict.clear()
print(a_dict)  #{}
#   del    ,del       ,clear()            。

pop()メソッドは、「キー」を指定した要素を削除して返します.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
temp = a_dict.pop("name")
print(temp) #DYX
print(a_dict)  #{'age': 24, 'sex': 'male'}

5.キーが辞書にあるかどうかを判断する
Python 3の方式.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
print("name" in a_dict) #True
print("ranking" in a_dict) #False

Python 2では、辞書オブジェクトhas_key()メソッドは、辞書に指定したキーが含まれているかどうかをテストします.python 3はこの方法をサポートしていません.inを使用する必要があります.
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
print (a_dict.has_key("name"))  #True
print(a_dict.has_key("ranking"))  #False

6.秩序辞書
Python内蔵辞書は無秩序で、要素の挿入順序を覚えられる辞書が必要な場合はcollectionsを使用します.OrderedDict.
たとえば、次のコードがあります.
x=dict()   #        
x['a']=3   #       “ ”,          “ -  ”
x['b']=5
x['c']=8
print(x)   #    {'b': 5, 'c': 8, 'a': 3}
print(x.items())  #dict_items( [ ('c', 8), ('a', 3), ('b', 5) ] )
print(dict(x.items()))  # {'b': 5, 'a': 3, 'c': 8}
import collections
x=collections.OrderedDict()  #        
x['a']=3   #       “ ”,          “ -  ”
x['b']=5
x['c']=8
print(x)    #OrderedDict( [ ('a', 3), ('b', 5), ('c', 8) ] )
print( dict(x) )   #       {'b': 5, 'a': 3, 'c': 8}

7.辞書のコピーと浅いコピー
copy()メソッドを使用して辞書の「浅いコピー」を実現し、浅いコピーで生成された辞書を修正し、元の辞書に影響を与えません.
浅いレプリケーション
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
b_dict = a_dict.copy()
print(b_dict)  #{'age': 24, 'name': 'DYX', 'sex': 'male'}
b_dict["name"] = "DDD"
print(b_dict)  #{'sex': 'male', 'name': 'DDD', 'age': 24}
print(a_dict)  #{'sex': 'male', 'name': 'DYX', 'age': 24}
#  b_dict   a_dict

コピー
a_dict = {'name':'DYX', 'sex':'male', 'age':24}
c_dict = a_dict
c_dict["name"] = "DDD"
print(c_dict)  #{'sex': 'male', 'name': 'DDD', 'age': 24}
print(a_dict) #{'sex': 'male', 'name': 'DDD', 'age': 24}
#  c_dict    a_dict

8.辞書の並べ替え
8.1「キーキーキー」によるソート
test_dict = {"DDD":15, "CMJ":43, "HLZ":66, "HXH":39}
sorted_key = sorted(test_dict)
print(sorted_key )  #['CMJ', 'DDD', 'HLZ', 'HXH']
#print(type(sorted_key))  #
for k in sorted_key:
    print(k, test_dict[k],end = " ")  #CMJ 43 DDD 15 HLZ 66 HXH 39

8.2「値Value」によるソート
test_dict = {"DDD":15, "CMJ":43, "HLZ":66, "HXH":39}
sorted_value = sorted(test_dict, key=test_dict.__getitem__)
print(sorted_value)  #['DDD', 'HXH', 'CMJ', 'HLZ']
for k in sorted_value:
    print(k, test_dict[k],end = " ")  #DDD 15 HXH 39 CMJ 43 HLZ 66

8.3 items()によるソート
キーによる
test_dict = {"DDD":15, "CMJ":43, "HLZ":66, "HXH":39}
res = sorted(test_dict.items())
print(res)  #[('CMJ', 43), ('DDD', 15), ('HLZ', 66), ('HXH', 39)]
#   
res = sorted(test_dict.items(),key=lambda d:d[0])
print(res) #[('CMJ', 43), ('DDD', 15), ('HLZ', 66), ('HXH', 39)]

値に基づいて
res = sorted(test_dict.items(),key=lambda d:d[1])
print(res)  #[('DDD', 15), ('HXH', 39), ('CMJ', 43), ('HLZ', 66)]

以上はすべて小さいから大きいまで並べ替えて、大きいから小さいまで.sorted()にreverse=Trueを加えます.
res = sorted(test_dict.items(),key=lambda d:d[1],reverse = True)
print(res)  #[('HLZ', 66), ('CMJ', 43), ('HXH', 39), ('DDD', 15)]

8.4 operatorを借りる.itemgeter()
import operator
test_dict = {"DDD":15, "CMJ":43, "HLZ":66, "HXH":39}
##  item           ,   key  
sort_by_key = sorted(test_dict.items(),key = operator.itemgetter(0))
print(sort_by_key)  #[('CMJ', 43), ('DDD', 15), ('HLZ', 66), ('HXH', 39)]

##  item           ,   value  
sort_by_value = sorted(test_dict.items(),key = operator.itemgetter(1))
print(sort_by_value) #[('DDD', 15), ('HXH', 39), ('CMJ', 43), ('HLZ', 66)]

#      
sort_by_value = sorted(test_dict.items(),key = operator.itemgetter(1),reverse = True)
print(sort_by_value) #[('HLZ', 66), ('CMJ', 43), ('HXH', 39), ('DDD', 15)]


間違いがあれば、指摘してください.感謝します.