如何从元素(列表)中找到匹配值(字典),并打印相应的匹配项?

时间:2019-08-12 23:47:49

标签: python python-2.7

我找不到与所有字典(值)匹配的列表(元素)。语法是什么?

我的目标是:无论列表中的任何元素,我都想找到字典中所有值的匹配项。如果是这样,则打印相应的字典(键,值)并打印与之匹配的列表。

我指定了列表中的any(elem),以匹配字典中的all(val)值。

x = ['AL3G13280', 'AL3G13290']
y = {'Protein of unknown function (DUF784)': 'AL1006U10010', 'FK506- and rapamycin-binding protein 15 kD-2': 'AL3G13280', 'Werner syndrome-like exonuclease': 'AL7G42630'}

for elem in x:
  for key, val in y.items():
    if any(elem) == all(val):
      print(key, val),
      print(TandClustList)

我希望将其打印出来:

('FK506- and rapamycin-binding protein 15 kD-2', 'AL3G13280') [['AL3G13280', 'AL3G13290']]

这是ACTUAL印刷品:

('Werner syndrome-like exonuclease', 'AL7G42630') [['AL3G13280', 'AL3G13290']]
('Protein of unknown function (DUF784)', 'AL1006U10010') [['AL3G13280', 'AL3G13290']]
('FK506- and rapamycin-binding protein 15 kD-2', 'AL3G13280') [['AL3G13280', 'AL3G13290']]

如何获得所需的预期打印结果?

2 个答案:

答案 0 :(得分:1)

您误解了all()any()的目的。我认为这里不是必需的,但有一个简短的解释:

    如果某些可迭代的 all 元素(例如元组,列表,字符串,生成器等)的值为,则
  • all()返回True,否则为False。
  • 如果某些可迭代元素中的 any 元素为,则
  • any()返回True,否则为False。

因此,如果您在字符串上调用all(),则结果应始终为True,因为字符串的每个“元素”都是另一个包含单个字符的字符串(如果字符串为空,则其结果为false)。在字符串为空的特殊情况下,all()仍返回True。

类似地,如果您在字符串上调用any(),则结果应始终为True,但空字符串除外,在这种情况下,它将返回False。

在您的示例中,只需删除对all()any()的调用即可获得所需的输出,就像这样:

for elem in x:
  for key, val in y.items():
    if elem == val:
      print(key, val),
      print(TandClustList)

答案 1 :(得分:1)

您可以使用以下方法来代替使用all()any()

x = ['AL3G13280', 'AL3G13290']
y = {'Protein of unknown function (DUF784)': 'AL1006U10010', 'FK506- and rapamycin-binding protein 15 kD-2': 'AL3G13280', 'Werner syndrome-like exonuclease': 'AL7G42630'}

for key, val in y.items():
    if val in x:
        print(key,val)
        print(TandClustList)

使用字典理解

x = ['AL3G13280', 'AL3G13290']
y = {'Protein of unknown function (DUF784)': 'AL1006U10010', 'FK506- and rapamycin-binding protein 15 kD-2': 'AL3G13280', 'Werner syndrome-like exonuclease': 'AL7G42630'}

print({ key:val for(key, val) in y.items() if val in x})
print(TandClustList)

输出:

('FK506- and rapamycin-binding protein 15 kD-2', 'AL3G13280')
[['AL3G13280', 'AL3G13290']]