首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用循环将列表附加到字典中

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

Stack Overflow用户
提问于 2021-01-04 14:25:59
回答 5查看 65关注 0票数 0

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

代码语言:javascript
复制
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)

我希望我的输出是这样的:

代码语言:javascript
复制
[{'Earth': {'low': 1, 'high': 0}}, {'Mars': {'low': 2, 'high': 0}}, {'Pluto': {'low': 0, 'high': 2}}, {'Uranus': {'low': 1, 'high': 1}}]

然而,它只在每个值中显示天王星值,所以它实际上是低= 1,高=1到处都是。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2021-01-04 14:39:46

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

  1. 为什么可以简单地执行for planet in planets时使用for i in range循环?(更多的readable)
  2. You're在这个循环中定义了太多的变量,而没有任何需要,这只会带来混乱。每个变量都应该表示一些逻辑实体。
  3. 您需要在每次迭代中定义一个新的字典,否则以前定义的每一次都会被更新。

这可能会给你这样的结果:

代码语言:javascript
复制
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)
票数 0
EN

Stack Overflow用户

发布于 2021-01-04 14:33:34

您可以在循环中使用临时字典,如下所示:

代码语言:javascript
复制
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)

它提供了以下输出:

代码语言:javascript
复制
[{'Earth': {'low': 1, 'high': 0}}, {'Mars': {'low': 2, 'high': 0}}, {'Pluto': {'low': 0, 'high': 2}}, {'Uranus': {'low': 1, 'high': 1}}]

如果在其他地方不需要entities,也可以删除它。

票数 0
EN

Stack Overflow用户

发布于 2021-01-04 14:33:46

代码语言:javascript
复制
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,所以它们实际上是在操作存储在同一个地址中的相同变量。因此,只需声明一个新变量,以避免这种行为。

产出:

代码语言:javascript
复制
{'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}}]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65564313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档