创建和查找每个值具有多个键的二维词典

2024-04-29 12:44:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想我想做一个二维字典,每个值有多个键。

我知道如何使用defaultdict制作二维词典:

from collections import defaultdict
2d_dict = defaultdict(dict)

2d_dict['canned_food']['spam'] = 'delicious'

我知道,使用普通字典,你可以用多个键制作,比如:

dictionary={('food','canned_food'):spam}

但我想做一些类似于按元组键查找的事情:

2d_dict[('canned_food','food')]['spam'] = 'delicious'

在字典的第一个维度中,每个值需要大约25个键。有没有办法用defaultdict来实现这一点?

即使有一种方法可以使用dicts,这是一种制作简单多维查找表的合理方法吗?


Tags: 方法fromimportdictionary字典foodspam事情
1条回答
网友
1楼 · 发布于 2024-04-29 12:44:09

除了2d_dict是无效的变量名(以数字开头)之外,现有的解决方案已经可以工作:

>>> from collections import defaultdict
>>> d2_dict = defaultdict(dict)
>>> d2_dict[('canned_food', 'food')]['spam'] = 'delicious'
>>> d2_dict
defaultdict(<type 'dict'>, {('canned_food', 'food'): {'spam': 'delicious'}})

事实上,您甚至不需要括号-Python仍然会将您的键识别为元组:

>>> d2_dict['fresh_food', 'food']['eggs'] = 'delicious'
>>> d2_dict
defaultdict(<type 'dict'>, {('canned_food', 'food'): {'spam': 'delicious'},
('fresh_food', 'food'): {'eggs': 'delicious'}})

。。。而且,是的,这是构建2D+1D查找表的一种非常合理的方法。

如果要使用嵌套的dict而不是元组键构建三维查找表,则此操作有效:

>>> d3_dict = defaultdict(lambda: defaultdict(dict))
>>> d3_dict['dried_food']['food']['jerky'] = 'chewy'
>>> d3_dict
defaultdict(<function <lambda> at 0x7f20af38a2a8>, 
{'dried_food': defaultdict(<type 'dict'>, {'food': {'jerky': 'chewy'}})})

相关问题 更多 >