有個不定長的列表,想把列表中的每一個值當作字典的key, 初始值爲空列表,因而想到了fromkeys這個方法
app
In [337]: l = ['a','b','c'] In [338]: res = dict.fromkeys(l, []) In [339]: res Out[339]: {'a': [], 'b': [], 'c': []} In [340]: res['a'].append(123) In [341]: res Out[341]: {'a': [123], 'b': [123], 'c': [123]}
看,問題出現了,原本只想給res['a']賦值,結果全部的鍵值對都被賦值了,這是由於,用fromkeys設置默認值的時候,若是值是[], 表示的是一個對象,而且是同一個對象,就和函數的默認參數設置成空列表是一個意思函數
改爲這樣的話就沒問題spa
In [342]: res = {'a': [], 'b': [], 'c': []} In [343]: res['a'].append(123) In [344]: res Out[344]: {'a': [123], 'b': [], 'c': []}
可是這種沒辦法處理不定長的列表了
還要一種方法:code
In [347]: res = dict([(k, []) for k in l]) In [348]: res Out[348]: {'a': [], 'b': [], 'c': []} In [349]: res['a'].append('14124') In [350]: res Out[350]: {'a': ['14124'], 'b': [], 'c': []}