【问题标题】:Appending to a list in Python: adds last element every time?附加到 Python 中的列表:每次都添加最后一个元素?
【发布时间】:2015-11-10 12:42:11
【问题描述】:

我想将 dict 附加到列表中,但得到的结果不是我想要的。

我的代码:

records=[]
record={}
for i in range(0,2):
  record['a']=i  
  for j in range (0,2):
    record['b']=j
    records.append(record)
print records 

我预计:

[{'a': 0, 'b': 0}, {'a': 0, 'b': 1}, {'a': 1, 'b': 0}, {'a': 1, 'b': 1}]

我得到了:

[{'a': 1, 'b': 1}, {'a': 1, 'b': 1}, {'a': 1, 'b': 1}, {'a': 1, 'b': 1}]

为什么每次只添加最后一个元素?

【问题讨论】:

    标签: python list append


    【解决方案1】:

    您正在重复使用和添加一个字典。如果您想要单独的字典,请每次附加一个副本:

    records = []
    record = {}
    for i in range(2):
        record['a'] = i  
        for j in range(2):
            record['b'] = j
            records.append(record.copy())
    

    或者每次都新建一个字典:

    records = []
    for i in range(2):
        for j in range(2):
            record = {'a': i, 'b': j}
            records.append(record)
    

    后一种方法适用于翻译成列表理解:

    records = [{'a': i, 'b': j} for i in range(2) for j in range(2)]
    

    【讨论】:

      【解决方案2】:

      record.copy() 如果您嵌套了字典,它将不起作用,因为它返回浅拷贝。请改用deepcopy,这是完全证明。

      from copy import deepcopy
      records.append(deepcopy(record))
      

      【讨论】:

        猜你喜欢
        • 2017-10-18
        • 2023-03-17
        • 1970-01-01
        • 1970-01-01
        • 2021-05-16
        • 1970-01-01
        • 2020-10-29
        • 1970-01-01
        • 2017-04-16
        相关资源
        最近更新 更多