簡體   English   中英

創建和查找每個值具有多個鍵的 2D 字典

[英]Create and lookup 2D dictionary with multiple keys per value

我想我想制作一個每個值有多個鍵的 2D 字典。

我知道如何使用defaultdict制作 2D 字典:

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 來做,這是制作一個簡單的多維查找表的合理方法嗎?

除了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'}})})

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM