迭代时将键设置为字典中的相同值

时间:2019-07-06 19:39:20

标签: python python-2.7

我有一个非常简单的字典,叫做mydict,正在对其进行迭代并设置新的嵌套键。由于某些原因,每个父键都在每次迭代中设置。每个random键应具有随机生成的数字。 dict.fromkeys(myset, {})似乎有些问题,好像我对其进行硬编码一样,一切似乎都很好。我尝试过copydeepcopy都没有运气。

import random
myset = ['A', 'B', 'C']
mydict = dict.fromkeys(myset, {})
for k, v in mydict.items():
    mydict[k]['random'] = random.random()
print mydict

输出看起来像这样:

{'A': {'random': 0.09458900537947934}, 'C': {'random': 0.09458900537947934}, 'B': {'random': 0.09458900537947934}}

3 个答案:

答案 0 :(得分:1)

您可以使用由键和值组成的元组初始化mydict

import random

myset = ['A', 'B', 'C']
mydict = dict(zip(myset, iter(lambda: {}, None)))

for k, v in mydict.items():
    mydict[k]['random'] = random.random()

print(mydict)

打印:

{'A': {'random': 0.17573941764965995}, 'B': {'random': 0.7591872462452937}, 'C': {'random': 0.6027577677034227}}

答案 1 :(得分:1)

尝试一下:

import random

myset = ['A', 'B', 'C']

mydict = {}

for k in myset:
    temp = {'random':random.random()}
    mydict[k] = temp

print (mydict)

创建一个空的字典然后填充它比较容易

输出:

{'A': {'random': 0.8487768382668905}, 'B': {'random': 0.3199770033314223}, 'C': {'random': 0.9574897543475179}}

答案 2 :(得分:0)

观察到行为的原因是调用dict.fromkeys函数,该函数获取值(您的情况下为空字典对象)并将其分配给每个键。因此,您在mydict中的所有键都指向相同的值(字典)。对于for循环中的每个键,您都使用新的random键更新相同的词典。如果您想了解更多,请执行以下操作:

for k, v in mydict.items():
  print('%s %s' % (k, id(v)))

您将看到,mydict词典中的每个值都是完全相同的字典。对于有效的代码,请尝试@okawo答案。