我有一个大字典对象,它有几个键值对(大约16个),但我只对其中的3个感兴趣。实现这一目标的最佳方法(最短/最高效/最优雅)是什么?
我所知道的是:
bigdict = {'a':1,'b':2,....,'z':26}
subdict = {'l':bigdict['l'], 'm':bigdict['m'], 'n':bigdict['n']}
我相信还有比这更优雅的方式。思想?
您可以尝试:
dict((k, bigdict[k]) for k in ('l', 'm', 'n'))
…或在python 3python versions 2.7或更高版本中(感谢f_bio diniz指出它在2.7中也可以工作):
{k: bigdict[k] for k in ('l', 'm', 'n')}
号
更新:作为H?瓦德指出,我假设你知道字典里会有钥匙,如果你不能做出这样的假设,就看看他的答案。或者,正如Timbo在评论中指出的那样,如果您想要一个在bigdict中丢失的键映射到None中,您可以这样做:
{k: bigdict.get(k, None) for k in ('l', 'm', 'n')}
如果您使用的是python 3,并且只希望新dict中的键实际存在于原始dict中,那么您可以使用视图对象实现一些集合操作的事实:
{k: bigdict[k] for k in bigdict.keys() & {'l', 'm', 'n'}}
。
如果bigdict不包含k将失败。
有点苛刻到投反对票-从上下文来看,我很清楚这些键在字典里…
@H&229;vard s:我认为从操作岗位上,我们可以假设所有给定的元素都在bigdict中。
@我做了一个评论,但没有投反对票,就像我对其他答案做的那样,没有检查钥匙是否存在。
"或在python 3"或"或在python中>=2.7"?
@H&229;Vard S:很抱歉得出这样的结论——有人投了反对票,但后来取消了。
哇,你现在能做到吗?我只是希望我的手机能从2.5.4升级…
{k: bigdict.get(k,None) for k in ('l', 'm', 'n')}将通过将新dict中的key设置为none来处理源字典中缺少指定密钥的情况。
谢谢,@timbo-我也在回答中加了一句,希望没问题。