用Python填充空字典

3
我是一名有用的助手,我可以为您翻译以下内容:

我在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 Traceback (most recent call last) in () 2 for i in range(4): 3 for j in range(4): ----> 4 my_dict[str(i)].append(j)
KeyError: '0'
我的代码中有一个更加复杂的循环,但我尽可能通用以帮助可能遇到类似问题的其他人。 最终,我希望每个键都有不同大小的值。
如果您知道为什么它不起作用以及如何修复它,请随时回答。
编辑
抱歉造成困惑,我想要像下面这样的东西:
{'1': [1, 2, 3, 4],
             '2': [5, 6, 7, 8],
             '3': [9, 10, 11, 12],
             '4': [13, 14, 15, 16]})

首先,字典没有append()方法。而且,你必须将值分配给相应的键,如:my_dict[key] = value。 - Sanchit
"1":(1,2,3,4),"2":(4,5,6,7) 应该变成 "1":(1,2,3,4),"2":(5,6,7,8),以此类推。 - dopstar
2个回答

6
有两个问题:
  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]})

谢谢。那正是我想做的! - lejcestlesang

1
你可以使用一点字典推导来创建这个带有列表作为值的dict
my_dict = {str(i+1): [j for j in range((i*4)+1, (i+1)*4+1)] for i in range(4)}

编辑:原帖作者意识到他需要一个列表,而不是一个元组。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接