在Python中有效地按键选择字典项

6 python numpy scipy

假设我有一个字典,其键是字符串.如何从仅包含某些列表中存在的键的字典中有效地创建新字典?

例如:

# a dictionary mapping strings to stuff
mydict = {'quux': ...,
          'bar': ...,
          'foo': ...}

# list of keys to be selected from mydict
keys_to_select = ['foo', 'bar', ...]
Run Code Online (Sandbox Code Playgroud)

我想出的方式是:

filtered_mydict = [mydict[k] for k in mydict.keys() \ 
                   if k in keys_to_select]
Run Code Online (Sandbox Code Playgroud)

但我认为这是非常低效的,因为:(1)它需要使用keys()枚举键,(2)它需要每次在keys_to_select中查找k.我想,至少有一个可以避免.有任何想法吗?如果需要,我也可以使用scipy/numpy.

Ale*_*lli 15

dict((k, mydict[k]) for k in keys_to_select)
Run Code Online (Sandbox Code Playgroud)

如果您知道所有要选择的键也是键mydict; 如果不是这样,

dict((k, mydict[k]) for k in keys_to_select if k in mydict)
Run Code Online (Sandbox Code Playgroud)

  • @pycruft,是的,和'timeit` cqn确认(`python -mtimeit -s'd = dict.fromkeys(range(99))''23 in d'etc),`in`实际上是大约是`has_key`的两倍(每次都保存一个命名属性查找,这与dict loolup的操作大致相同).从来没有任何理由再使用`has_key`了,它已经从Python 3中删除了. (3认同)