我有一个字典,其中字符串作为键,列表作为值。我现在有了另一个列表(list2(,我想搜索是否有包含list2所有项目的字典值列表。然后,我希望输出成为匹配字典值列表的键。
我的代码现在看起来像这样:
for elem in list2:
for elem2 in dict.keys():
if all(item in elem2 foritem in list2):
print(elem2)
value_found_list = dict.get(elem2)
print(value_found_list)
编辑最小可复制性示例:
dict{
"key1": ['item1', 'item2', 'item3'],
"key2": ['item2', 'item4', 'item5'],
"key3": ['item3', 'item6', 'item4']
}
list = ['item2', 'item3']
如何使用此数据返回哪个字典关键字包含列表中的所有项?
如果您计划进行会员检查,最好将第二个list
更改为set
。
这里有一个简短的函数可以做到这一点。
编辑:由于你是用另一种方式来做的,所以只使用dict
中的列表可能不那么耗时。然而,首先以set
的形式使用它们可能更有意义。对set
进行散列,这转化为更快的查找时间。如果你的list
很长,你可以用这种形式来节省一些计算时间
def get_key(dct, lst2):
# iterate through every key and list
for key, lst in dct.items():
# if all the list items are present in your second list
if all(i in lst for i in lst2):
return key
# default to returning None
return None
dct = {
"key1": ['item1', 'item2', 'item3'],
"key2": ['item2', 'item4', 'item5'],
"key3": ['item3', 'item6', 'item4']
}
lst = ['item2', 'item3']
print(get_key(dct, lst))
你做错的地方就在这里。
for elem2 in dict.keys():
if all(item in elem2 foritem in list2):
elem2
是一个字符串键。item in elem2
正在密钥中查找完整的字符串。dict.values()
返回您可能正在查找的值或列表。
然而,dict.items()
将键和值作为元组返回,这可能正是您所需要的。
观看此
a = {'one':[1, 2, 3, 4], 'two':[5, 6, 7, 8], 'three':[9, 10]}
b = {'four':[1, 2, 3, 4], 'five':[6, 7, 8], 'six':[9, 10]}
for akey in a:
for bkey in b:
if a[akey] == b[bkey]:
print(akey, bkey)
输出:
one four
three six
l=[i for i in your_dict if set(your_dict[i]).union(set(list2))==set(your_dict[i])]
print(l)
用于:
your_dict={
"key1": ['item1', 'item2', 'item3'],
"key2": ['item2', 'item4', 'item5'],
"key3": ['item3', 'item6', 'item4']
}
list2 = ['item2', 'item3']
输出为:
['key1']