【问题标题】:I want the output to be like {'Red':1,'Blue':2,'Green':3} .I'm only getting {'Green':3}我希望输出类似于 {'Red':1,'Blue':2,'Green':3} 。我只得到 {'Green':3}
【发布时间】:2016-09-18 11:09:08
【问题描述】:
list_color=['Red','Blue','Green']

for i ,b in enumerate(list_color,1):

    if i<=2:
        dict ={b:i}

    else:
        break

    i+=1

print(dict)

输出:

{'Green':3}

【问题讨论】:

    标签: python-3.x for-loop dictionary


    【解决方案1】:

    您告诉解释器用新值重新分配名称dict,而不是更新字典。

    dict = {b:i}  # we talk about this line
    

    对于基于另一个可迭代对象创建对象,comprehensions 是典型的方法,在这种情况下是 dictionary comprehension

    colors = ['Red','Blue','Green']
    d = {color: idx for idx, color in enumerate(colors, 1)}
    # {'Blue': 2, 'Green': 3, 'Red': 1}
    

    不保持顺序,因为字典是无序的数据结构。

    另外,尽量避免使用内置函数命名对象,当使用 dict 名称时,它会隐藏 dict builtin function

    【讨论】:

      【解决方案2】:

      我不知道你为什么在 for 循环中有这么多语句,所以我举一个简单的例子:

      list_color=['Red','Blue','Green']
      dict={}
      for i ,b in enumerate(list_color,1):
          dict[b] = i
      
      print(dict)
      

      请注意,我如何在循环之前将 dict 定义为空字典。我更改的另一件事是您为字典分配值的方式。您正在用每个作业覆盖字典的完整内容。我现在展示如何向字典中添加值。

      我推荐一个像http://www.pythontutor.com/visualize.html 这样的网站,它允许可视化代码的执行。然后你可以看到发生了什么/错误/不符合你的期望。

      【讨论】:

        猜你喜欢
        • 2021-12-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-03
        • 1970-01-01
        • 2015-06-17
        相关资源
        最近更新 更多