在python中以列表作为值搜索字典中的特定列表



我有一个字典,其中字符串作为键,列表作为值。我现在有了另一个列表(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']

最新更新