用Python填充空字典

时间:2018-07-26 12:57:59

标签: python python-3.x list dictionary defaultdict

我在用Python填充空字典时遇到问题

我将字典声明如下:

my_dict = {}

我想一次用不同的键和不同的值填充它。 我希望最后有类似的东西:

{"1":(1,2,3,4),"2":(4,5,6,7),"3":(8,9,10,11),"4":(12,13,14,15)}

因此,我尝试按照以下步骤进行操作:

for i in range(4):
    for j in range(4):
         my_dict[str(i)].append(j)

但是我在第一个循环中遇到以下错误:

  

KeyError跟踪(最近一次通话最近)        在()中       2代表我在范围(4)中:       对于范围(4)中的j为3:       ----> 4 my_dict [str(i)]。append(j)
      KeyError:“ 0”

我的代码中的for循环要复杂得多,但是我尝试尽可能地笼统地帮助其他可能遇到类似问题的人。 最后,我希望每个键的大小都不同。

如果您知道为什么它不起作用以及如何解决它,请随时回答。

编辑

对不起,我想要类似以下的内容:

{'1': [1, 2, 3, 4],
             '2': [5, 6, 7, 8],
             '3': [9, 10, 11, 12],
             '4': [13, 14, 15, 16]})

2 个答案:

答案 0 :(得分:2)

有2个问题:

  1. 您不能附加到元组。元组是不可变的。
  2. 您不能将尚未为特定键定义的字典值附加到后面。这是您的KeyError的原因。

可以将collections.defaultdictlist一起使用来缓解这些问题:

from collections import defaultdict

my_dict = defaultdict(list)

for i in range(4):
    for j in range(4):
         my_dict[str(i)].append(j)

print(my_dict)

defaultdict(list,
            {'0': [0, 1, 2, 3],
             '1': [0, 1, 2, 3],
             '2': [0, 1, 2, 3],
             '3': [0, 1, 2, 3]})

更接近所需的输出,您将需要重新定义range对象:

my_dict = defaultdict(list)

for i in range(1, 5):
    for j in range((i-1)*4+1, i*4+1):
         my_dict[str(i)].append(j)

print(my_dict)

defaultdict(list,
            {'1': [1, 2, 3, 4],
             '2': [5, 6, 7, 8],
             '3': [9, 10, 11, 12],
             '4': [13, 14, 15, 16]})

答案 1 :(得分:1)

您可以使用一点dict理解来创建此dict,并使用列表作为值:

my_dict = {str(i+1): [j for j in range((i*4)+1, (i+1)*4+1)] for i in range(4)}

编辑:OP意识到他想要一个列表,而不是一个元组。