我有一个大字典对象,它有几个键值对(大约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}

其他回答

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

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')}

如果有人想要字典的前几项n而不知道键:

n = 5 # First Five Items
ks = [*dikt.keys()][:n]
less_dikt = {i: dikt[i] for i in ks}

你也可以使用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)从以前的答案:)

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

可能:

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}