【问题标题】:How to append copies of elements to Python list? [duplicate]如何将元素的副本附加到 Python 列表? [复制]
【发布时间】:2019-06-24 13:30:17
【问题描述】:

我的 Python 代码如下所示:

import random
import copy

symbols = set('ABC')
values = dict.fromkeys(symbols, [])

for i in range(5):
  value = random.randint(1, 100)
  if value % 3 == 0:
    values['A'].append(copy.deepcopy(value))
  elif value % 3 == 1:
    values['B'].append(copy.deepcopy(value))
  else:
    values['C'].append(copy.deepcopy(value))

print(values)
> {'B': [19, 31, 73, 9, 9], 'A': [19, 31, 73, 9, 9], 'C': [19, 31, 73, 9, 9]}

我希望字典的每个属性都有不同的元素列表,但是我得到的最终结果是它们都具有相同的数字(如上所示)。尽管我使用deepcopy 复制元素,为什么会发生这种情况?我该如何解决这个问题?

【问题讨论】:

  • 您的问题不在于value(无论如何它是不可变的),而在于fromkeys 中的默认值。
  • @MikeScotty 感谢您的指点。

标签: python copy


【解决方案1】:

你可以使用defaultdict来达到你想要的结果。

from collections import defaultdict
import random

values = defaultdict(list)

for i in range(5):
  value = random.randint(1, 100)
  if value % 3 == 0:
    values['A'].append(value)
  elif value % 3 == 1:
    values['B'].append(value)
  else:
    values['C'].append(value)

print(values)

而且你不需要复制value

defaultdict(list) 每当第一次访问字典中的键时都会创建一个新列表 - 因此您将有 3 个不同的对象作为字典中的值。

【讨论】:

    猜你喜欢
    • 2013-02-10
    • 2019-06-23
    • 2017-04-16
    • 2023-03-09
    • 1970-01-01
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多