【问题标题】:Dictionary with values of empty list具有空列表值的字典
【发布时间】:2021-11-23 12:25:05
【问题描述】:

我想创建一个包含 1、2、3、4 键的字典 键的每个值都是 []。

n = [1,2,3,4]
d = dict.fromkeys(n, [])

d[1].append(777)

print(d)

--> {1: [777], 2: [777], 3: [777], 4: [777]}

为什么会这样?为什么这不是{1: [777], 2: [], 3: [], 4: []}?

【问题讨论】:

    标签: list dictionary indexing duplicates append


    【解决方案1】:

    您在第二步中用作值的列表都指向同一个内存。因此,当您更新其中一个值时,它们都会更新。

    您可以使用以下命令进行检查 -

    n = [1,2,3,4]
    d = dict.fromkeys(n, [])
    
    d[1] is d[2] #share memory
    
    #True
    

    因此,您可以改为执行以下操作 -

    n = [1,2,3,4]
    d = {k:[] for k in n}
    
    d[1] is d[2]
    
    #False
    

    那么你就可以设置then-

    d[1].append(777)
    
    {1: [777], 2: [], 3: [], 4: []}
    

    更好的方法是使用collections.defaultdict。这允许您创建一个字典,其中默认值为list 对象,使用defaultdict(list)。它具有可扩展性,您可以选择需要字典值的数据类型。

    from collections import defaultdict
    
    n = [1,2,3,4]
    d = defaultdict(list)
    
    d[1].append(777)
    

    【讨论】:

      猜你喜欢
      • 2019-07-25
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      • 2013-08-31
      • 1970-01-01
      相关资源
      最近更新 更多