治疗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}
这假定不是inlis
中的所有值都将在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