我试图将几个列表添加到一个字典中,但它似乎正在打印循环中的最后一个条目。有什么办法可以避免吗
list_orbited_planet = ["Earth", "Mars", "Pluto", "Uranus"]
low = ["Earth", "Mars", "Mars", "Uranus"]
high = ["Pluto", "Pluto", "Uranus"]
entities = {'low': low, 'high': high}
listPlanets = []
for i in range(len(list_orbited_planet)):
entities['low'] = low.count(list_orbited_planet[i])
entities['high'] = high.count(list_orbited_planet[i])
orbited_planet = {list_orbited_planet[i]: entities}
print(orbited_planet)
listPlanets.append(orbited_planet)
print(listPlanets)
我希望我的输出如下:
[{'Earth': {'low': 1, 'high': 0}}, {'Mars': {'low': 2, 'high': 0}}, {'Pluto': {'low': 0, 'high': 2}}, {'Uranus': {'low': 1, 'high': 1}}]
然而,它只在每个值中显示天王星值,所以它在任何地方都是低=1,高=1
由于您的
entities
在每个循环中都被引用,因此它们实际上是在操作存储在同一地址中的同一变量。因此,只需声明一个新变量即可避免这种行为输出:
问题是
orbited_planet = {list_orbited_planet[i]: entities}
总是对每个行星使用完全相同的字典entities
。这意味着每个行星共享同一个字典,其值是最后一次通过循环时设置的。一个解决方案是将该行更改为它将按预期工作
我想比前面的答案更进一步,并提出几点建议:
for planet in planets
时,为什么要使用for i in range
循环?(可读性更强)这会给你类似的东西:
相关问题 更多 >
编程相关推荐