如何创建具有两个键和一个值的字典?

4

在Python中,我可以这样定义字典:

d = {}

并将数据存储为:
d['a1'] = 1

如何存储两个密钥?

d['a1']['b1'] = 1
d['a1']['b2'] = 2

d['a2']['b1'] = 3
d['a2']['b2'] = 4

然后打印出所有键和值,例如d['a1'],其结果应为:

b1 -> 1
b2 -> 2

你需要一个嵌套字典——字典的字典——来完成这个任务。 - martineau
这就是被接受的答案所做的事情(以及@LemonPi的) - defaultdict 是一个子类(即专门化)字典,本例中它被用于在首次分配给其键之一时自动创建子字典。请查看defaultdict文档。 - martineau
4个回答

10

你可以使用来自 collections 模块的 defaultdict文档在这里):

from collections import defaultdict

d = defaultdict(dict)

d['a1']['b1'] = 1
d['a1']['b2'] = 2

d['a2']['b1'] = 3
d['a2']['b2'] = 4

print(d['a1'])

打印:

{'b1': 1, 'b2': 2}

1
我最喜欢这个... 最干净和易于理解! - Joe

1
你可以使用collections.defaultdict,但是你不能像你的例子中一样混合使用int和dict赋值给d['a1']
from collections import defaultdict

d = defaultdict(dict)

d['a1']['b1'] = 1
d['a1']['b2'] = 2

d['a2']['b1'] = 3
d['a2']['b2'] = 4
d['a3'] = 1

print(d['a1'])
print(d['a3'])

>>> {'b1': 1, 'b2': 2}
>>> 1

如果您真的想先将1分配给d['a1'],然后将其更改为字典,那么您需要在赋值后手动执行d['a1'] = {}

0
你需要创建嵌套字典:
d = {'a1': {'b1': 1, 'b2': 2}, 'a2': {'b1': 3, 'b2': 4}}

然后只需要:

for k, v in d['a1'].items():
    print(k, v)

-1

那不是一个dict; 它是一个将其他dict作为值的dict

d['a1'] = {'b1': 1}
d['a1'] = {'b2': 2}
d['a2'] = {'b1': 3}
d['a2'] = {'b2': 4}

从那里开始,您可以像处理其他任何值一样处理每个嵌套的dict。例如:

for k1, v1 in d.items():
    for k2, v2 in v1.items():
        print("{} -> {} -> {}".format(k1, k2, v2))    

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