繁体   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