[python入門および進級ノート]Python-基礎-辞書小結

6148 ワード


<!--
h1, h2, h3, h4, h5, h6, p, blockquote
{margin:0;
padding:0}
body
{font-family:"Helvetica Neue",Helvetica,"Hiragino Sans GB",Arial,sans-serif;
font-size:13px;
line-height:18px;
color:#737373;
background-color:white;
margin:10px 13px 10px 13px}
table
{margin:10px 0 15px 0;
border-collapse:collapse}
td, th
{border:1px solid #ddd;
padding:3px 10px}
th
{padding:5px 10px}
a
{color:#0069d6}
a:hover
{color:#0050a3;
text-decoration:none}
a img
{border:none}
p
{margin-bottom:9px}
h1, h2, h3, h4, h5, h6
{color:#404040;
line-height:36px}
h1
{margin-bottom:18px;
font-size:30px}
h2
{font-size:24px}
h3
{font-size:18px}
h4
{font-size:16px}
h5
{font-size:14px}
h6
{font-size:13px}
hr
{margin:0 0 19px;
border:0;
border-bottom:1px solid #ccc}
blockquote
{padding:13px 13px 21px 15px;
margin-bottom:18px;
font-family:georgia,serif;
font-style:italic}
blockquote:before
{content:"\201C";
font-size:40px;
margin-left:-10px;
font-family:georgia,serif;
color:#eee}
blockquote p
{font-size:14px;
font-weight:300;
line-height:18px;
margin-bottom:0;
font-style:italic}
code, pre
{font-family:Monaco,Andale Mono,Courier New,monospace}
pre
{display:block;
padding:14px;
margin:0 0 18px;
line-height:16px;
font-size:11px;
border:1px solid #d9d9d9;
white-space:pre-wrap;
word-wrap:break-word}
pre code
{background-color:#fff;
color:#737373;
font-size:11px;
padding:0}
-->
ブログ移行:新しいアドレス  (直通クリック)新ブログmarkdownメンテナンスを使用し、オフラインにバージョンライブラリがあり、自分で書いたのでタイミングよく同期を更新し、同時により良いナビゲーションと読書体験csdnを提供することはmarkdownのサポートによくないので、旧版は同じステップで改訂することはありません.申し訳ありません.
-----------------------
辞書
定義#テイギ#
dictionary
1.キー値ペアの集合(map)
2.辞書は括弧「{}」で囲まれたデータセット
3.ディクショナリは無秩序であり、ディクショナリでキーを使用してメンバーにアクセスします.可変、ネスト可能、拡張などを元の場所で修正でき、新しい辞書が生成されません.
4.辞書のキーは、文字列(大文字と小文字が敏感)、数値定数またはメタグループ(可変タイプ)であり、同じ辞書のキーはタイプを混用することができる.辞書のキーはハッシュ可能でなければなりません
メタグループがキーとして使用される条件は、メタグループ内の値が可変タイプであることです.
  a = (1,2)  #     
  b = (1,2,[3,4])  #   

5.辞書の値は任意のタイプで、ネストすることができ、自由に修正することができる.
宣言
辞書の作成方法:
1.基本
d = {} #   
d = {'name':'tom', 'age':22} 
#  
d = {}
d['name'] = 'tom'
d['age'] = 22

2.dict
d = dict() # 
d = dict(name='tom', age=22)   

d = dict([('name','tom'), ('age',22)])
#  
keys = ['name','age']
values = ['tom', 22]
d = dict(zip(keys,values))

3.fromkeys
default_を指定しないvalueならデフォルトNone
>>> dict.fromkeys(['name','age'],'default_value')
{'age': 'default_value', 'name': 'default_value'}

きほんそうさ
0.ヘルプの取得
help(dict)

1.キーが辞書に存在するか否かを判定する
if k in d:   #k not in
    dosomething()

2.読み取り
d = {'a':1, 'b':2}

print d['a']  #  1,       ,     KeyError。  ,     

print d.get('c', 3) #  3,get  ,      ,       default_value.     default_value  None

missing-keyエラーを処理する3つの方法は、具体的なニーズに応じて
if k in d:
    print d[k]

try:
    print d[k]
except KeyError:
    dosomething()

print d.get(k, default)
#   d[k] if k in d else default

3.遍歴
方法1:
for key in d:
    print key, d[key]
#   for key in d.keys()

方法2:
for key,value in d.items():
    print key, value

4.修正方法1:あるキー値ペア
d['key'] = 'newvalue'

方法2:一括追加または更新
#     
d.update({'key':'newvalue'})  #        

#    
d.update( [ ('a',1), ('b',2) ] ) #        ,(key,value)

#**key
d.update(c=3, e=4) 

5.削除
del d['key']
value = d.pop('key') #      
d.clear() #  

6.その他:
len(d)   #  
d.keys()  #key  
d.values()  #value  
d.items()   #(key, value)   
c = d.copy()   #   
#     ,    
d.iterkeys()
d.itervalues()
d.iteritems()
d.setdefault('name', 'ken') #     ,  ,      

その他
1.辞書のソートkeyでソート
keys = d.keys()
keys.sort()
for key in keys:
    print d.get(key)

valueでソート
sorted(d.items(), lambda x,y: cmp(x[1],y[1]))

さらに、
#  d   
sorted(d)  #    sorted(d.keys()),    key  

2.keyとしてカスタムオブジェクト
必須:
def __hash__(self):
    pass
def __eq__(self, other):
    pass

3.ディクショナリコピーの浅いコピー:
c = d.copy() #

深いコピーにはcopyモジュールが必要です
form copy import deepcopy
c = deepcopy(d)

4.シーン仮定を用いて大きなリストlがあり、10 wのレコードがあると仮定する
bの要素がlにあるかどうかを判断する小さなリストbがあります.
次の場合:
for i in b:
    if i in l:
        dosomething()

とても遅いことに気づきます第2のin文は、10 w条を遍歴するので....
改善:
d = dict.fromkeys(l)
for i in b:
    if i in d:
        dosomething()
#     ,O(n) -> O(1)

The end!
To be continue
wklken
Email: [email protected]
Blog: http://blog.csdn.net/wklken
2013-03-09
転載は出典を明記してください、ありがとうございます