如何使用循环将列表附加到字典

2024-09-27 00:15:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将几个列表添加到一个字典中,但它似乎正在打印循环中的最后一个条目。有什么办法可以避免吗

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


Tags: 列表字典countlistlowentitiesprintmars
3条回答
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}}]

问题是orbited_planet = {list_orbited_planet[i]: entities}总是对每个行星使用完全相同的字典entities。这意味着每个行星共享同一个字典,其值是最后一次通过循环时设置的。一个解决方案是将该行更改为

orbited_planet = {list_orbited_planet[i]: entities.copy()}

它将按预期工作

我想比前面的答案更进一步,并提出几点建议:

  1. 当您可以简单地执行for planet in planets时,为什么要使用for i in range循环?(可读性更强)
  2. 您在这个循环中定义了太多的变量,这会带来混乱。每个变量都应该表示一些逻辑实体
  3. 您需要在每次迭代中定义一个新的词汇表,否则以前定义的词汇表每次都会更新

这会给你类似的东西:

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)

相关问题 更多 >

    热门问题