python fromkeys的坑

有个不定长的列表,想把列表中的每个值当做字典的key, 初始值为空列表,于是想到了fromkeys这个方法

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设置默认值的时候,如果值是[], 表示的是一个对象,并且是同一个对象,如果这样的话就没问题

In [342]: res = {'a': [], 'b': [], 'c': []}

In [343]: res['a'].append(123)

In [344]: res
Out[344]: {'a': [123], 'b': [], 'c': []}

但是这种没办法处理不定长的列表了
还要一种方法:

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': []}

猜你喜欢

转载自www.cnblogs.com/zhang-can/p/9288313.html