5

我想我想制作一个每个值有多个键的二维字典。

我知道如何使用以下方法制作 2D 字典defaultdict

from collections import defaultdict
2d_dict = defaultdict(dict)

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

而且我知道使用常规字典可以使用多个键,例如:

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

但我想做一些类似 tuple-of-keys 的查找:

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

在字典的第一维中,每个值我需要约 25 个键。有没有办法做到这一点defaultdict

即使有办法用 dicts 来做,这是制作简单多维查找表的合理方法吗?

4

1 回答 1

11

除了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 查找表的完全合理的方式。

如果您想使用嵌套字典而不是元组键构建 3D 查找表,则可以使用:

>>> 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'}})})
于 2012-11-10T21:27:47.523 回答