python fromkeys的坑

有個不定長的列表,想把列表中的每一個值當作字典的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': []}
相關文章
相關標籤/搜索