# 辞書
# 辞書は、Pythonに組み込まれている唯一のマッピングタイプです。辞書には特別な順序はありませんが、すべて特定のキーに保存されます(key)以下では、キーは数字、文字列、またはタプルにすることができます
# 1.辞書の使用
# 場合によっては、辞書がリストよりも適しています:
#1、 ゲームボードの状態を表します。各キーは座標値で構成されるタプルです。
#2、 ファイルの変更時刻を保存し、ファイル名をキーとして使用します;
#3、 デジタル電話\住所録
#1、 リストを使用して電話帳を作成します,(ここでは電話番号は文字列で表され、0で始まる番号は8進数にコンパイルされます)
name=["A","B","C","D"]
phone=["2341","9102","3158","0142","5551"]print(phone[name.index("B")])
# これは問題ありませんが、実用的ではありません
# 次に、辞書を作成して使用します
# 辞書を作成する,辞書は、複数のキーとそれに対応する値で構成されています。-値のペアはコロンで区切られ、項目はコンマで区切られ、辞書は中括弧で囲まれます。空の辞書{}組成
# 辞書のキーは一意ですが、値は一意ではありません
phonebook={"Alice":"2431",'Beth':'9102','Cecil':'3258'}
#1、 dict関数、他のマッピングを介してdict関数を使用できます(他の辞書など)または(キー、値)シーケンスのペアの辞書
items=[('name','Gumby'),('age',42)]
d=dict(items)print(d)print(d['name'])
# dict関数は、キーワード引数を使用して辞書を作成することもできます
a=dict(name="CY",num=42)print(a['name'])
#2、 基本的な辞書操作
# ほとんどの操作はシーケンスに似ています
# ディクショナリ内のキーと値のペアの数を返します
print(len(a))
# 通常のインデックス
a=dict(name="CY",num=42)print(a["name"])
# 辞書のキーに値を割り当てます
a["name"]="Challenger"print(a)
# デル削除キー
del a["name"]print(a)
# キーが辞書に存在するかどうかを検出するために使用します
print("num"in a)
# リストとの違い
# キータイプ:字典的キータイプ不一定为整形数据,键可以是任意不可变类型,比如浮点类型(リアルタイプ)、文字列またはメタレント
# 自動的に追加:キーが最初に辞書に存在していなくても、それに値を割り当てることができ、辞書は新しいアイテムを作成します。そして(appendメソッドまたは他の同様の操作を使用せずに)リストの範囲外のインデックスに値を関連付けることはできません
# 辞書の式キーは、値ではなくキーを検索します。リスト内の式の値は、インデックスではなく、値を見つけるために使用されます。
# ディクショナリのチェックキーのメンバーシップは、リストのチェック値のメンバーシップよりも高くなります。データ構造が大きいほど、2つの間の効率のギャップが明確になります。
# 辞書の例
# シンプルなデータベース
# 辞書は人の名前を鍵として使用します。各人は、キーを持つ別の辞書によって表されます'phone'と'addr'分别表示他们的电话号码と地址
people={'Alice':{'phone':'2341','addr':'Fpp driver 23'},'Beth':{'phone':'9102','addr':'Bar street 42'},'Cecil':{'phone':"3158",'addr':'Baz avenue 90'}}
# 電話番号の住所に使用されている説明ラベルは、印刷物に使用されます
lable={'phone':'phone number','addr':'address'}
name=input('Name: ')
# 電話番号または住所を探す?
request=input('Phone number(p) or address(a)?')
# 正しいキー値を使用してください
if request=='p':
key='phone'if request=='a':
key='addr'
# 名前が辞書で有効なキー値である場合にのみ情報を出力します
if name in people:print("%s's %s is %s."%(name,lable[key],people[name][key]))
#4 辞書方式
#1、 明確な方法
# clearメソッドは、辞書内のすべてのアイテムをクリアします。これは、次のようなin-situ操作です。(list.sort)したがって、戻り値はありません(またはNoneを返します)
d={}
d['name']='CY'
d['age']=23print(d)
returned_value=d.clear()print(d)print(returned_value)
# clearを使用する意味は、元の辞書を実際に空にすることです。
# 状況1,xを空の辞書に関連付けると、xをクリアできますが、yには影響しません。また、yは元の辞書にも関連付けられます。
x={}
y=x
x['key']='value'print(y)
x={}print(x)print(y)
# 状況2,clearメソッドを使用して、元の辞書をクリアします
x1={}
y1=x1
x1["key"]="value"print(y1)
x1.clear()print(x1)print(y1)
#2、 copyメソッドは、同じキーと値のペアを持つ新しい辞書を返します(値自体は同じであり、コピーではないため、このメソッドは浅いコピーを実装します),値が影響を受けない場合、変更された場合、copyを使用してコピーされた辞書(追加、削除)値、元の辞書も変更されます
x={'username':'admin','machines':['foo','bar','baz']}
y=x.copy()
y['username']='mlh'
y['machines'].remove('bar')print(y)print(x)
# 上記の問題を回避するには、ディープコピー機能を使用できます
from copy import deepcopy
d={}
d['name']=['Alfred','Bertrand']
c=d.copy()
dc=deepcopy(d)
d['name'].append('Clive')print(c)print(dc)
#3、 fromkeysメソッドは、指定されたキーを使用して新しい辞書を作成します。各キーはNoneに対応します。
print({}.fromkeys(['name','age']))
# 上記の方法は空の辞書を使用します。別の辞書を作成するのは少し冗長です。dictメソッドを直接使用できます。
print(dict.fromkeys(['name','age']))
# デフォルト値を指定することもできます
print(dict.fromkeys(['name','age'],'(unknown)'))
#4、 getメソッドは、辞書にアクセスするための非常に緩い方法です。getを使用しない場合、辞書に存在しないアイテムにアクセスするときにエラーが発生します。,何も返しません
d={}print(d.get('name'))
# カスタマイズも可能"デフォルト"print(d.get('name',"N/A"))
# キーが存在する場合、getは通常の辞書クエリと同じ方法で使用されます
d['name']='CY'print(d.get('name'))
# getメソッドを使用して電話帳の機能を実現します
people={'Alice':{'phone':'2341','addr':'Fpp driver 23'},'Beth':{'phone':'9102','addr':'Bar street 42'},'Cecil':{'phone':"3158",'addr':'Baz avenue 90'}}
lable={'phone':'phone number','addr':'address'}
name=input('Name: ')
request=input('Phone number(p) or address(a)?')if request=='p':
key='phone'if request=='a':
key='addr'
person=people.get(name,{})
lable=lable.get(key,key)
result=person.get(key,'not available')print("%s's %s is %s."%(name,lable,result))
#5、 items
# itemメソッドは、辞書内のすべてのアイテムをリストに返します。返すときの特定の順序はありません。
# 3. x内部、iteritems()そしてviewitems()両方の方法が廃止され、アイテム()結果はと2.x内部viewitems()一貫性があります。 3時.xでアイテムを使用する()iteritemsを置き換えます()、forを使用してループスルーできます。
d={'title':'ppp','name':'ccc'}print(d.items())
#6、 keys()辞書のキーをリストとして返します
print(d.keys())
#7、 popメソッドは、特定のキーに対応する値を取得し、このキーと値のペアを辞書から削除するために使用されます。
d1={'aasd':"sadad",'asdasd':"sadsadad"}print(d1.pop('aasd'))print(d1)
#8、 popitem
# popitemメソッドはlistに似ています.pop,後者はリストの最後の要素をポップアップします。ただし、違いは、popitemがランダムなアイテムをポップアップすることです。これは、辞書に最後の要素がないため、このメソッドはアイテムを1つずつ削除して処理するのに適しています。(最初にキーのリストを取得する必要がないため、非常に効率的です)
d2={'a':'b',"c":'d'}print(d2.popitem())print(d2)
#9、 setdefault
# setdefaultは、ある程度取得するのと似ており、特定のキーに関連する値を取得できます。辞書に特定のキーが含まれていない場合、setdefaultは対応するキー値を設定することもできます。,キー値が存在する場合、元のキー値は変更されません
d3={}
d3.setdefault('name','None')print(d3)
d3['name']='CY'print(d3.setdefault('name','None'))
#10、 update
# updateメソッドは、ある辞書を使用して別の辞書を更新できます,キー値が存在する場合は上書きされ、存在しない場合は追加されます。
d={'title':'sasdadadad',"url":"asdasdadsad","change":'asdasdada'}
a={'title':"a"}
d.update(a)print(d)
#11、 values,現在の辞書の値を返すために使用されます
d={}
d[1]=1
d[2]=2print(d.values())
# 辞書形式の文字列
# 各変換指定子の後に、キーを追加できます(括弧で囲まれています)、説明要素が続きます
phonebook={'Beth':'9102','Alice':'1111','tom':'1551'}print("tom's phoneNum is %s"% phonebook["tom"])print("tom's phoneNum is %(tom)s"% phonebook)
# 追加された文字列キーを除いて、変換指定子は以前と同じように機能します。このように辞書を使用する場合、指定されたすべてのキーが辞書にある限り、任意の数の変換指定子を使用できます。
# このタイプの文字列フォーマットは、テンプレートシステムで非常に役立ちます
template="""<html><head><title>%(title)s</title></head><body><h1>%(title)s</h1><p>%(text)s</p></body>"""
data={"title":"My Home Page","text":"Welcome to my home page!"}print(template % data)
Recommended Posts