2017-03-17 43 views
2

我有以下代码:如何找到,如果列表中的任何元素存在于词典

fileTypes = ["photo", "audio"] 
arg = {"photo": "123"} 
is_file = True if [True for f in fileTypes if f in arg.keys()] else False 

is_file输出True,如果“照片”或“音频”是的关键之一arg

我想is_file返回False或文件类型之一,如果它设置在arg。其中一种文件类型可以在arg字典中。

此外,我认为这并没有优化。我想要一个更好的选择。

+2

你是说像? 'is_file = [f在arg中用于fileTypes中的f]'或者可能'is_file = any(f在arg中用于fileType中的f)' –

+0

是的,类似的!非常感谢你! – Villiam

回答

2

any()怎么样?

from timeit import timeit 

def list_comprehension_method(): 

    fileTypes = ["photo", "audio"] 
    arg = {"photo": "123"} 
    return True if [True for f in fileTypes if f in arg.keys()] else False 

def any_method(): 

    fileTypes = ["photo", "audio"] 
    arg = {"photo": "123"} 
    return any(f in arg.keys() for f in fileTypes) 


number = 1000 

print('any_method:     ', timeit('f()', 'from __main__ import any_method as f', number=number)) 
print('list_comprehension_method: ', timeit('f()', 'from __main__ import list_comprehension_method as f', number=number)) 

的Python 2.7:

any_method:     0.001070976257324218 
list_comprehension_method: 0.001577138900756836 

的Python 3.6:

any_method:     0.0013788840005872771 
list_comprehension_method: 0.0015097739960765466 
+1

你可能也想显示你的时间结果。在使用'in'运算符时也不需要'.keys()'调用 –

+0

@Chris_Rands当然,我会将'timeit'结果添加到帖子中!我提交后,我注意到你有同样的想法,但在我之前10分钟发布,作为评论... :)我看到人们经常发表评论,我从来没有得到原因......请问为什么你更喜欢发表评论而不是回答?只是好奇。谢谢! –

+1

感谢您添加时间;我实际上并不确定我是否有他们想要的答案 –

相关问题