繁体   English   中英

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

[英]How to find matching value(dictionary) from an element(list), and printing corresponding match?

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

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

我指定了列表的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']]

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

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

  • 如果所有可迭代元素(例如,元组,列表,字符串,生成器等)中的所有元素求值为True,则all()返回True,否则返回False。
  • 如果某些iterable中的任何元素求值为True,则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)

不用简单地使用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']]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM