从字典中提取键值对的子集?

新手上路,请多包涵

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

我知道的最好的是:

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

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

原文由 Jayesh 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 274
2 个回答

你可以试试:

 dict((k, bigdict[k]) for k in ('l', 'm', 'n'))

…或在蟒蛇3 Python 2.7 或更高版本 (感谢 Fábio Diniz 指出它也适用于 2.7)

 {k: bigdict[k] for k in ('l', 'm', 'n')}

更新:正如 Håvard S 指出的那样,我假设您知道键将在字典中 - 如果您无法做出该假设,请参阅 他的回答。或者,正如 timbo 在评论中指出的那样,如果您想要 bigdict 中缺少的密钥映射到 None ,您可以执行以下操作:

 {k: bigdict.get(k, None) for k in ('l', 'm', 'n')}

如果您使用的是 Python 3,并且您 想要新字典中实际存在于原始字典中的键,则可以使用事实来查看对象实现一些设置操作:

 {k: bigdict[k] for k in bigdict.keys() & {'l', 'm', 'n'}}

原文由 Mark Longair 发布,翻译遵循 CC BY-SA 4.0 许可协议

至少要短一点:

 wanted_keys = ['l', 'm', 'n'] # The keys you want
dict((k, bigdict[k]) for k in wanted_keys if k in bigdict)

原文由 Håvard S 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题