Python-返回字典键,将字典值与列表进行比较

时间:2020-11-04 01:50:33

标签: python dictionary for-loop

我正在尝试将列表与字典值进行比较以查看它们是否匹配,以便我可以返回键,但找不到匹配它们的解决方案:

>>> 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]:

我不太确定该怎么做。感谢您的帮助。

谢谢!

3 个答案:

答案 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]