我有一个大字典对象,它有几个键值对(大约16个),但我只对其中3个感兴趣。将这样的字典子集化的最佳方法(最短/有效/最优雅)是什么?

我知道的最好的是:

bigdict = {'a':1,'b':2,....,'z':26} 
subdict = {'l':bigdict['l'], 'm':bigdict['m'], 'n':bigdict['n']}

我相信有比这更优雅的方式。


当前回答

可能:

subdict=dict([(x,bigdict[x]) for x in ['l', 'm', 'n']])

Python 3甚至支持以下内容:

subdict={a:bigdict[a] for a in ['l','m','n']}

注意你可以在字典中检查是否存在,如下所示:

subdict=dict([(x,bigdict[x]) for x in ['l', 'm', 'n'] if x in bigdict])

分别地。对于python 3

subdict={a:bigdict[a] for a in ['l','m','n'] if a in bigdict}

其他回答

py3.8+中另一种避免big_dict中缺少键的None值的方法使用walrus:

small_dict = {key: val for key in ('l', 'm', 'n') if (val := big_dict.get(key))}

此答案使用与所选答案类似的字典推导,但不会对缺失项进行省略。

Python 2版本:

{k:v for k, v in bigDict.iteritems() if k in ('l', 'm', 'n')}

Python 3版本:

{k:v for k, v in bigDict.items() if k in ('l', 'm', 'n')}
interesting_keys = ('l', 'm', 'n')
subdict = {x: bigdict[x] for x in interesting_keys if x in bigdict}

你也可以使用map(这是一个非常有用的函数):

sd = dict(map(lambda k:(k, l.get(k, None)), l)))

例子:

large_dictionary = {'a1':123, 'a2':45, 'a3':344}
list_of_keys = ['a1', 'a3']
small_dictionary = dict(map(lambda key: (key, large_dictionary.get(key, None)), list_of_keys))

PS:我借用了.get(键,None)从以前的答案:)

可能:

subdict=dict([(x,bigdict[x]) for x in ['l', 'm', 'n']])

Python 3甚至支持以下内容:

subdict={a:bigdict[a] for a in ['l','m','n']}

注意你可以在字典中检查是否存在,如下所示:

subdict=dict([(x,bigdict[x]) for x in ['l', 'm', 'n'] if x in bigdict])

分别地。对于python 3

subdict={a:bigdict[a] for a in ['l','m','n'] if a in bigdict}