【问题标题】:python list of dictionary in for loop returning all the same values [duplicate]for循环中的python字典列表返回所有相同的值[重复]
【发布时间】:2020-04-13 03:27:33
【问题描述】:

我正在尝试使用下面的data 变量中显示的以下结构创建一个 python 字典。我有一个正在运行的 for 循环,它正在附加到一个列表中,但是如果您从返回输出中看到 dlist 中的所有值都是 {'data': 2} 我有点困惑,为什么我会得到所有相同的值字典中的条目。

# trying to make this dict structure in for loop
data = [{'data': 0}, 
        {'data': 1}, 
        {'data': 2}]

d={}
dlist=[]
for i in range(0,3):
     d['data']=i
     dlist.append(d)
     print(d)

# PRINT OF D FROM LOOP 
{'data': 0}
{'data': 1}
{'data': 2}

# STRANGLY DLIST ONLY HAS DATA 2 IN THE LIST
dlist
[{'data': 2}, {'data': 2}, {'data': 2}]

【问题讨论】:

  • 这是一个非常常见的陷阱。将d = {} 放入for 循环中,这样每次迭代都会创建一个新字典。按照现在的方式,您将一遍又一遍地向列表中添加相同的字典引用。
  • 要真正简化它,您可以将一行更改为:dlist.append({'data': i})

标签: python python-3.x


【解决方案1】:

试试这个:

dlist=[]
for i in range(0,3):
     dlist.append({'data': I})

【讨论】:

    【解决方案2】:

    试试:

    data = [{'data': 0}, 
            {'data': 1}, 
            {'data': 2}]
    
    dlist=[]
    for i in range(0,3):
        d = {}
        d['data']=i
        dlist.append(d)
        print(d)
    

    由于您打算添加新字典,因此在每个循环中创建新字典。


    现在看看你为什么得到那个 dlist,运行:

    data = [{'data': 0}, 
            {'data': 1}, 
            {'data': 2}]
    d = {}
    dlist=[]
    for i in range(0,3):
        d['data']=i
        dlist.append(d)
        print(dlist)
    

    这是因为字典中的键相同。字典从其初始值更新。

    【讨论】:

    • 嘿 Joshua 这其实就是我要找的。谢谢,我会接受你的回答。
    【解决方案3】:

    目前,您的列表正在创建指向d 字典的链接,这不是您想要的。您必须在 for 循环中初始化 d dict inside

    dlist=[]
    for i in range(0,3):
        d = {}
        d['data']=i
        dlist.append(d)
        print(d)
    

    【讨论】:

      猜你喜欢
      • 2012-09-27
      • 2015-02-13
      • 2013-06-09
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      • 1970-01-01
      • 2021-10-05
      • 2019-09-20
      相关资源
      最近更新 更多