[英]Find a value in dict then get the key
我正在使用Python3。我有3個組,在這些組中,我有多個值。
我具有所尋找的價值,並且希望得到他的支持。 例如,如果我有CCC
,則需要獲得GROUP 1
;如果我有HHH
我需要GROUP 3
然后根據組進行一些操作。
所以我想我要創建一個這樣的字典(如果我寫錯了,請告訴我):
{
'group1': {'AAA','BBB','CCC','DDD'},
'group2': {'EEE','FFF','GGG'},
'group3': {'HHH','JJJ'}
}
所以我看到我們可以還原dict以從一個值獲取密鑰,所以我想這樣做:
dict = {
'group1': {'AAA','BBB','CCC','DDD'},
'group2': {'EEE','FFF','GGG'},
'group3': {'HHH','JJJ'}
}
revdict = dict([(dict[key],key) for key in dict])
group = revdict['CCC']
if group == 'group1':
# Do something
elif group == 'group2':
# Do something
elif group == 'group3':
# Do something
但是我認為這不是做我想要的事情的好方法。 有一種方法可以執行以下操作:
if 'CCC' in dict :
# Then get the current key. How ?
或者,也許我不需要創建dict而是其他東西? 我接受您的所有建議。
您的反向dict
(通常稱為反向索引)將失敗,因為您將集合用作鍵。 集合是可變的,它們不能被散列以形成dict
鍵。 相反,您可能希望組中的每個元素形成一個鍵。
您可以使用defaultdict
重寫正確的反向索引。
from collections import defaultdict
groups = {
'group1': {'AAA', 'BBB', 'CCC', 'DDD'},
'group2': {'EEE', 'FFF', 'GGG'},
'group3': {'HHH', 'JJJ'}
}
inverted_index = defaultdict(set)
for name, group in groups.items():
for element in group:
inverted_index[element].add(name)
print('group1' in inverted_index['AAA']) # True
print('group1' in inverted_index['EEE']) # False
在倒排索引中,一個元素可能有多個指向它的鍵(即使您的數據中不是這種情況),這就是為什么每個值都必須是一set
鍵的原因。
如您似乎在評論中指出的那樣,如果確保您的數據僅具有一對一的對應關系,那么您可以簡單地創建一個dict
。
inverted_index = {element: name for name, group in groups.items() for element in group}
print(inverted_index)
{'AAA': 'group1',
'BBB': 'group1',
'CCC': 'group1',
'DDD': 'group1',
'EEE': 'group2',
'FFF': 'group2',
'GGG': 'group2',
'HHH': 'group3',
'JJJ': 'group3'}
您可以使用列表推導來檢索key
並且僅在要查找的str
包含其values
時才返回key
d = {
'group1': {'AAA','BBB','CCC','DDD'},
'group2': {'EEE','FFF','GGG'},
'group3': {'HHH','JJJ'}
}
a = [i for i in d if 'CCC' in d[i]]
# ['group1']
我堅持不使用索引作為密鑰,
answer = None
for key in d.keys():
if "CCC" in d[key]:
answer = key
break
* @ Olivier建議的編輯
for k,v in dict.items():
if 'CCC' in v:
print(k)
您無法逃避循環或反向指令。 如果您沒有內存限制,請使用逆向字典。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.