我试图将几个列表添加到一个字典中,但它看起来像是在打印循环中的最后一个条目。有什么办法可以避免吗?
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到处都是。
发布于 2021-01-04 14:39:46
我想比以前的回答更进一步,并提出几点建议:
for planet in planets时使用for i in range循环?(更多的readable)这可能会给你这样的结果:
list_orbited_planet = ["Earth", "Mars", "Pluto", "Uranus"]
low = ["Earth", "Mars", "Mars", "Uranus"]
high = ["Pluto", "Pluto", "Uranus"]
listPlanets = []
for planet in list_orbited_planet:
orbited_planet = {
planet:
{
'low': low.count(planet),
'high': high.count(planet)
}
}
listPlanets.append(orbited_planet)
print(listPlanets)发布于 2021-01-04 14:33:34
您可以在循环中使用临时字典,如下所示:
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)):
tmp_entities = {}
tmp_entities['low'] = low.count(list_orbited_planet[i])
tmp_entities['high'] = high.count(list_orbited_planet[i])
orbited_planet = {list_orbited_planet[i]: tmp_entities}
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}}]如果在其他地方不需要entities,也可以删除它。
发布于 2021-01-04 14:33:46
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)):
newEntities = dict()
newEntities['low'] = low.count(list_orbited_planet[i])
newEntities['high'] = high.count(list_orbited_planet[i])
orbited_planet = {list_orbited_planet[i]: newEntities}
print(orbited_planet)
listPlanets.append(orbited_planet)
print(listPlanets)因为每个循环都要引用您的entities,所以它们实际上是在操作存储在同一个地址中的相同变量。因此,只需声明一个新变量,以避免这种行为。
产出:
{'Earth': {'low': 1, 'high': 0}}
{'Mars': {'low': 2, 'high': 0}}
{'Pluto': {'low': 0, 'high': 2}}
{'Uranus': {'low': 1, 'high': 1}}
[{'Earth': {'low': 1, 'high': 0}}, {'Mars': {'low': 2, 'high': 0}}, {'Pluto': {'low': 0, 'high': 2}}, {'Uranus': {'low': 1, 'high': 1}}]https://stackoverflow.com/questions/65564313
复制相似问题