0

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

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

我指定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']]

这是实际的印刷品:

('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']]

我怎样才能达到我想要的预期打印结果?

4

2 回答 2

1

Instead of using all() or any() simply you can do with:

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)

Using Dictionary Comprehension

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)

Output:

('FK506- and rapamycin-binding protein 15 kD-2', 'AL3G13280')
[['AL3G13280', 'AL3G13290']]
于 2019-08-13T07:30:42.497 回答
1

您误解了all()and的目的any()。我认为这里不需要它们,但快速解释一下:

  • all()如果某个可迭代对象(例如元组、列表、字符串、生成器等)中的所有元素评估为 True,则返回 True,否则返回 False。
  • any()如果某个可迭代对象中的任何元素的计算结果为 True,则返回 True ,否则返回 False。

因此,如果您调用all()一个字符串,结果应该始终为 True,因为字符串的每个“元素”都是另一个包含单个字符的字符串(字符串只有在为空时才会评估为 false)。在字符串为空的特殊情况下,all()仍然返回 True。

同样,如果你调用any()一个字符串,结果应该总是 True,除了空字符串,在这种情况下它会返回 False。

在您的示例中,您应该通过简单地删除对all()and的调用来获得所需的输出any(),如下所示:

for elem in x:
  for key, val in y.items():
    if elem == val:
      print(key, val),
      print(TandClustList)
于 2019-08-13T00:03:39.923 回答