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