簡體   English   中英

如何從值中找到字典中的鍵?

[英]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.

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