在 Python 中填充空字典
Filling empty dictionary in Python
我无法在 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'
我的代码中有一个更复杂的 for 循环,但我尽量做到更通用,以帮助其他可能有类似问题的人。
最后,我想为每个键设置不同大小的值。
如果您知道为什么它不起作用以及如何解决它,请随时回答。
编辑
抱歉造成混淆,我想要类似以下内容:
{'1': [1, 2, 3, 4],
'2': [5, 6, 7, 8],
'3': [9, 10, 11, 12],
'4': [13, 14, 15, 16]})
有 2 个问题:
- 您不能附加到元组。元组是不可变的。
- 您不能附加到尚未为特定键定义的字典值。这就是你
KeyError
. 的原因
使用 collections.defaultdict
和 list
可以缓解这些问题:
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]})
您可以创建这个 dict
,使用一个列表作为值,使用一点字典理解:
my_dict = {str(i+1): [j for j in range((i*4)+1, (i+1)*4+1)] for i in range(4)}
编辑:OP 意识到他想要一个列表,而不是元组。
我无法在 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'
我的代码中有一个更复杂的 for 循环,但我尽量做到更通用,以帮助其他可能有类似问题的人。 最后,我想为每个键设置不同大小的值。
如果您知道为什么它不起作用以及如何解决它,请随时回答。
编辑
抱歉造成混淆,我想要类似以下内容:
{'1': [1, 2, 3, 4],
'2': [5, 6, 7, 8],
'3': [9, 10, 11, 12],
'4': [13, 14, 15, 16]})
有 2 个问题:
- 您不能附加到元组。元组是不可变的。
- 您不能附加到尚未为特定键定义的字典值。这就是你
KeyError
. 的原因
使用 collections.defaultdict
和 list
可以缓解这些问题:
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]})
您可以创建这个 dict
,使用一个列表作为值,使用一点字典理解:
my_dict = {str(i+1): [j for j in range((i*4)+1, (i+1)*4+1)] for i in range(4)}
编辑:OP 意识到他想要一个列表,而不是元组。