字典递增错误的Python列表

时间:2018-12-10 23:15:25

标签: python dictionary

Python 3.6

我有一个词典列表-

houses = ['a', 'b', 'c']
rarity_values = {'Common':0,'uncommon':0}
rarity = {}.fromkeys([i for i in houses],rarity_values) # creates dictionary of id

print(rarity)
# {'a': {'Common': 0, 'uncommon': 0}, 'b': {'Common': 0, 'uncommon': 0}, 'c': {'Common': 0, 'uncommon': 0}}

我正在查看某个文档,我想计算每个house中发生一件常见的事情的次数。因此,如果我看到Commons的两个house a和房子b的1个罕见,我得到结果

# {'a': {'Common': 2, 'uncommon': 0}, 'b': {'Common': 0, 'uncommon': 1}, 'c': {'Common': 0, 'uncommon': 0}}

但是,我注意到当我为任何一个Common增加house的值时,会为所有这些值递增。

print('a (before increment)',rarity['a']['Common'])
print('b (before increment)',rarity['b']['Common'])
rarity['b']['Common'] += 1
print('a (after increment)',rarity['a']['Common'])
print('b (after increment)',rarity['b']['Common'])

产生输出

a (before increment) 0
b (before increment) 0
a (after increment) 1
b (after increment) 1

代替

a (before increment) 0
b (before increment) 0
a (after increment) 0
b (after increment) 1

由于我只将b加1。

或者为了更好看

{'a': {'Common': 1, 'uncommon': 0}, 'b': {'Common': 1, 'uncommon': 0}, 'c': {'Common': 1, 'uncommon': 0}}

应该是

{'a': {'Common': 0, 'uncommon': 0}, 'b': {'Common': 1, 'uncommon': 0}, 'c': {'Common': 0, 'uncommon': 0}}

有人知道我做错了吗?我应该以其他方式嵌套吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您应该使用字典理解。

for i in houses:
    rarity[i] = dict(rarity_values)

在您的原始代码中,您将rarity_values的相同实例链接到每个键'a'和'b'