[英]How would I find the key in a dictionary from a value?
假設我有一本字典:
thisdict = {
"1": ['Vanilla','Chocolate']
"2": ['Vanilla']
"7": ['Chocolate']
"8": ['Chocolate','Vanilla']
}
注意:數字是身份證號碼。
我想輸入值:['Vanilla','Chocolate'] 並獲取所有鍵,無論值出現的順序如何。
所以我希望它返回的是:
[“1”,“8”]
謝謝你。
您可以通過將值作為集合進行比較來輕松檢查相等性(這將解決排序問題)。
thisdict = {
"1": ['Vanilla','Chocolate'],
"2": ['Vanilla'],
"7": ['Chocolate'],
"8": ['Chocolate','Vanilla'],
}
x = {'Vanilla','Chocolate'}
keys = [k for k, v in thisdict.items() if set(v) == x]
print(keys) # -> ['1', '8']
如果您的 dict 不超過這個,並且您只需每隔一段時間進行一次搜索,那么 Filip Młynarski 的“蠻力”解決方案可能就足夠了。
如果它更長,並且您必須對其進行大量搜索(搜索之間的 dict 保持不變),您可能需要建立一個“反向索引”:
from collections import defaultdict
thisdict = {
"1": ['Vanilla','Chocolate'],
"2": ['Vanilla'],
"7": ['Chocolate'],
"8": ['Chocolate','Vanilla'],
}
rev = defaultdict(list)
for key, values in thisdict.items():
rev[frozenset(values)].append(key)
x = frozenset(('Vanilla','Chocolate'))
keys = rev[x]
print(keys)
關鍵是要知道構建此反向索引的開銷是否會通過(可能巨大的)查找性能增益來補償,這取決於您的具體數據集和用例。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.