python 關於dict的一些總結


總結了一些關於字典的小技巧或者注意的地方。

使用zip創建字典

創建字典有以下三種方法

dict(a=1, b=2, c=2)
dict([(a,1), (b,2), (c,3)])
dict({a:1, b:2, c:3})

推薦使用第二種方法結合zip創建

key = 'abcde'
value = range(1, 6)
dict(zip(key, value))

使用iteritems來遍歷字典

d = dict(a=1, b=2, c=3)
for k, v in d.iteritems():
    print k, v
# a 1
# c 3
# b 2

當然也可以使用items來遍歷字典, 與之不同的是iteritems返回一個迭代器。

d = dict(a=1, b=2, c=3)
for k, v in d.items():
    print k, v
# a 1
# c 3
# b 2
In [69]: d.iteritems()
Out[69]: <dictionary-itemiterator at 0x3f216d8>

In [70]: d.items()
Out[70]: [('a', 1), ('c', 3), ('b', 2)]

使用get, pop來獲取/刪除key

首先,dict[key] 與 delete dict[key]也可以獲取/刪除key。但是key不存在時,會引發 KeyError 異常。為了避免引發異常可以使用get和帶defaut參數的pop

  • get(key[, default])
    如果key在字典中,返回對應的value, 否則返回default。所以從來不會引發異常。
  • pop(key[, default])
    如果default未設置,則如果key不在字典中,刪除key將引發異常。使用時加上default。

dict(dict1, **dict2)合並兩個字典

合並兩個字典可以先把兩個字典分成key-value對,再連接兩個key-value對,生成新的字典。即 dict(dict1.items()+dict2.items()) 。不過效率有些低。
使用效率更高的 dict(dict1, **dict2) 連接兩個字典。

In [29]: dict1
Out[29]: {'a': 1, 'b': 2, 'c': 3}

In [30]: dict2
Out[30]: {'d': 4, 'e': 5, 'f': 6}

In [31]: dict(dict1, **dict2)
Out[31]: {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}

$ python -m timeit -s 'dict1=dict2=dict(a=1,b=2)' 'dict3=dict(dict1,**dict2)'
1000000 loops, best of 3: 0.573 usec per loop
$ python -m timeit -s 'dict1=dict2=dict(a=1,b=2)' 'dict3=dict(dict1.items()+dict2.items())'
100000 loops, best of 3: 2.21 usec per loop

謹慎使用dict.copy()

dict.copy()是一個淺拷貝,當遇到字典或者列表時,將不能完全拷貝。使用copy模塊的deepcopy()方法。

import copy

dict1 = {'a': [1, 2], 'b': 3}
dict2 = dict1
dict3 = dict1.copy()
dict4 = copy.deepcopy(dict1)

dict1['b'] = 'change'
dict1['a'].append('change')

print dict1  # {'a': [1, 2, 'change'], 'b': 'change'}
print dict2  # {'a': [1, 2, 'change'], 'b': 'change'}
print dict3  # {'a': [1, 2, 'change'], 'b': 3}
print dict4  # {'a': [1, 2], 'b': 3}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM