我正在尝试将列表与字典值进行比较以查看它们是否匹配,以便我可以返回键,但找不到匹配它们的解决方案:
>>> my_dict = {'A': ['apple', 'america'], B: ['bee', 'bar'], C: ['car','cake','cat'], D: ['dad']}
>>> my_list = ['apple', 'dad']
在这种情况下,结果将是:
['A', 'D']
什么是最好的方法?我尝试了嵌套的for循环,但我想知道是否有更直接的答案。
my_second_dict = {}
for key in my_dict.keys():
for values in my_dict[key]:
我不太确定该怎么做。感谢您的帮助。
谢谢!
答案 0 :(得分:1)
您有一个值列表,并且想要字典项的键,这些键的值中包含这些值(值列表)。假设字典中的列表中没有重复项(这似乎是合理的,因为它似乎是按首字母进行分组的。)
这是一个解决方案:
my_dict = {'A': ['apple', 'america'], 'B': ['bee', 'bar'], 'C': ['car','cake','cat'], 'D': ['dad']}
my_list = ['apple', 'dad']
my_result = [k for v in my_list for k, vs in my_dict.items() if v in vs]
print(my_result)
结果:
['A', 'D']
答案 1 :(得分:0)
你的意思是这样吗?
my_dict = {'A': ['apple', 'america'], B: ['bee', 'bar'], C: ['car','cake','cat'], D: ['dad']}
my_list = ['apple', 'dad']
results = []
for key in my_dict.keys():
for value in my_list:
if value in my_dict[key]:
results.append(key)
break
print(results)
浏览字典中的键,并检查列表中是否有任何值在字典中。
如果使用集合交集或列表理解,则无需使用break语句。
my_dict = {'A': ['apple', 'america'], B: ['bee', 'bar'], C: ['car','cake','cat'], D: ['dad']}
my_list = ['apple', 'dad']
results = []
for key in my_dict.keys():
if set(my_list).intersection(set(dict[key])):
results.append(key)
print(results)
my_dict = {'A': ['apple', 'america'], B: ['bee', 'bar'], C: ['car','cake','cat'], D: ['dad']}
my_list = ['apple', 'dad']
results = []
for key in my_dict.keys():
if any([val in my_dict[key] for val in my_list]):
results.append(key)
print(results)
答案 2 :(得分:0)
我认为,如果您完成循环,则可以得到如下结果:
output = []
for i in my_list:
for k, v in my_dict.items():
if i in v:
output.append(k)
或单线
output = [k for i in my_list for k, v in my_dict.items() if i in v]