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': []}
相关文章
相关标签/搜索