我找不到与所有字典(值)匹配的列表(元素)。语法是什么?
我的目标是:无论列表中的任何元素,我都想找到字典中所有值的匹配项。如果是这样,则打印相应的字典(键,值)并打印与之匹配的列表。
我指定了列表中的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']]
如何获得所需的预期打印结果?
答案 0 :(得分:1)
您误解了all()
和any()
的目的。我认为这里不是必需的,但有一个简短的解释:
all()
返回True,否则为False。 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']]