2d字典,每个值有多个键

时间:2012-11-10 21:01:16

标签: python dictionary key

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

我知道如何使用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这样做,这是一个合理的方法来制作一个简单的多维查找表吗?

1 个答案:

答案 0 :(得分: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查找表的完美合理方法。

如果你想使用嵌套dicts而不是tuple键来构建一个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'}})})