Python Dict具有列表中的键
如何确定是否有任何列表元素是dict的键? 直截了当的方法是Python Dict具有列表中的键,python,list,dictionary,Python,List,Dictionary,如何确定是否有任何列表元素是dict的键? 直截了当的方法是 for i in myList: if i in myDict: return True return False 但是有没有更快/更简洁的方法呢?假设您正在谈论python,另一种方法是: #!python any(x in MyDict for x in MyList) set(MyList).intersection(MyDict) return len([x for x in myList if x in
for i in myList:
if i in myDict:
return True
return False
但是有没有更快/更简洁的方法呢?假设您正在谈论python,另一种方法是:
#!python
any(x in MyDict for x in MyList)
set(MyList).intersection(MyDict)
return len([x for x in myList if x in myDict]) > 0
除了any(我的目录中的项目用于我的列表中的项目)
from:
或:
衡量相对绩效
需考虑的案例:
mgag\u loop()
在所有情况下都是最快的
1.列表开头的项位于字典中。
2.列表末尾的项在字典中。
3.字典中没有列表中的项。
如何繁殖
下载并运行python main.py
(numpy
,matplotlib
应安装以创建绘图)
要更改输入列表的最大大小,相应地绘制供应点的点数--maxn
,--npoints
。例如:
$ python main.py --maxn 65536 --npoints 16
关于一个相关问题:
>>> if all (k in foo for k in ("foo","bar")):
... print "They're there!"
...
They're there!
您可以对其进行调整,以检查字典中是否出现以下内容:
>>> if any(k in myDict for k in ("foo","bar")):
... print "Found one!"
...
Found one!
您可以对照密钥列表进行检查:
>>> if any(k in myDict for k in myList):
... print "Found one!"
...
Found one!
非常感谢大家。我测试了所有答案的性能,最快的是
return len([x for x in myList if x in myDict]) > 0
但我没有尝试“设置”答案,因为我不知道如何将它变成一行。@Dario:可能是boo,但我想答案还是一样的。过早优化是万恶之源。any()解决方案更加优雅。仅供参考,您应该使用复选标记来表示您已接受的答案,而不是像这样发布另一个答案。我看不出
len()
如何更快。你使用了什么输入?我已经衡量了所有答案的性能:any
的关键优势是短路,而any(map(…
失去了关键优势!太棒了。我对python不是很了解,今天通过阅读所有答案学到了很多。你的总结太棒了。你应该得到答案!:-)OMG。我明天回去测试一下。“亚历克斯:你说得对。我已经澄清了‘map’变体适用于Python 3.XI在这两个测试之间的测试,具体来说,LeN([X在NoDeLIST中,如果X在RelvoDo])>0 vs DEF MigaGrLob(MyDIST,MyLIST)。:对于myList中的i:if i in myDict:return True return False,三次运行的结果几乎相同(每次运行约80秒),误差在1%以内。第二个选项总是更快,但余量很小。+1表示清晰、高效(仅限第一个版本!),和simplicity.btw。如果MyDict'中的键不在
MyList'的开头,则“set”版本比“any”版本快。这有两个问题:这不必要建立一个列表并查找所有出现的情况,而不会造成短路。
def args_no_key(n):
'Make args for comparison functions "no key" case.'
d = dict.fromkeys(xrange(n))
lst = range(n, 2*n+1)
assert not any(x in d for x in lst)
return (d, lst)
$ python main.py --maxn 65536 --npoints 16
>>> if all (k in foo for k in ("foo","bar")):
... print "They're there!"
...
They're there!
>>> if any(k in myDict for k in ("foo","bar")):
... print "Found one!"
...
Found one!
>>> if any(k in myDict for k in myList):
... print "Found one!"
...
Found one!
return len([x for x in myList if x in myDict]) > 0