簡體   English   中英

如果值在嵌套列表中,則獲取父鍵 (dict_values)

[英]Get the parent key if a value is in the nested list (dict_values)

我有一本看起來像這樣的字典:

{'7D': {'category': 'C', 'directory': 'C', 'name': 'Co'},
 '37': {'category': 'C', 'directory': 'C', 'name': 'FI'},
 'AA': {'category': 'F', 'directory': 'F', 'name': 'Le'},
 '80': {'category': 'Cl', 'directory': 'F', 'name': 'AV'},
 'F7': {'category': 'Cl', 'directory': 'F', 'name': 'AG'}}

如果lookup_value = 'Co'我想得到7D 我已經嘗試過這兩種方法:

lookup_value = 'Co'
for name, val in groups.items():
    if val == lookup_value:
        print(name)

和這個:

print(list(groups.keys().[list(groups.values()).index(lookup_value)])

第二個返回:

 ValueError: 'Co' is not in list

編輯:

我很抱歉這個爛攤子,我認為初始字典沒有嵌套字典。 事實證明,這是一個列表,可以從以下內容中觀察到:

bbb = groups.values()
type(bbb)

返回dict_values 事實證明這是一個列表,如下面的 Daniel F 所示!

通常,字典用於單向查找。 如果您發現自己經常進行反向查找,則可能值得創建和維護一個反向字典:

groups = {...}
names = {v['name']: k for k, v in groups.items()}

現在就像訪問一樣簡單

names['Co']

如果您真的只想查找而不創建反向字典,請使用next和生成器:

next(k for k, v in groups.items() if v['name'] == 'Co')

我想解釋為什么您的第一種方法不能按預期工作並提供最小更改的修復。 您的groups是 dict ,鍵是str ,值是dict ,因此在您的 for 循環中:

for name, val in groups.items():

valdict例如: {'category': 'C', 'directory': 'C', 'name': 'Co'}並詢問 python strdict之間的相等性 ( == ) 導致響應:否。正確的問題: 'Co'dict的值中嗎? 更改后,您的代碼將起作用:

lookup_value = 'Co'
for name, val in groups.items():
    if lookup_value in val.values():
        print(name)

輸出:

7D

暫無
暫無

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

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