治疗
lis为一组,而不是,所以你可以使用字典视图和一个交叉点:
# python 2.7:n = {k: d[k] for k in d.viewkeys() & set(lis)}# python 3:n = {k: d[k] for k in d.keys() & set(lis)}
或者,您可以使用简单的dict理解以及
in针对的测试
d:
# python 2.6 or older:n = dict((k, d[k]) for k in lis if k in d)# python 2.7 and up:n = {k: d[k] for k in lis if k in d}
这假定不是in
lis中的所有值都将在in中
d;
if k in d如果它们总是存在,则可以放弃该测试。
对于您的特定情况,第二种形式要快得多:
>>> from timeit import timeit>>> timeit("{k: d[k] for k in d.viewkeys() & s}", 'from __main__ import d, lis; s=set(lis)')2.156520128250122>>> timeit("{k: d[k] for k in lis if k in d}", 'from __main__ import d, lis')0.9401540756225586
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)