从 dict 返回前 N 个键值对

新手上路,请多包涵

考虑以下字典 d:

 d = {'a': 3, 'b': 2, 'c': 3, 'd': 4, 'e': 5}

我想从 d 返回前 N 个键值对(在本例中为 N <= 4)。最有效的方法是什么?

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

阅读 430
2 个回答

没有“前 n 个”键这样的东西,因为 dict 不记得先插入了哪些键。

您可以获得 任何 n 个键值对:

 n_items = take(n, d.items())

这使用了 take 来自 itertools 食谱 的实现:

 from itertools import islice

def take(n, iterable):
    """Return the first n items of the iterable as a list."""
    return list(islice(iterable, n))

在线查看它: ideone

对于 Python < 3.6

 n_items = take(n, d.iteritems())

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

检索任何内容的一种非常有效的方法是将列表或字典理解与切片相结合。如果您不需要对项目进行排序(您只需要 n 个随机对),则可以使用这样的字典理解:

 # Python 2
first2pairs = {k: mydict[k] for k in mydict.keys()[:2]}
# Python 3
first2pairs = {k: mydict[k] for k in list(mydict)[:2]}

通常,这样的理解总是比等效的“for x in y”循环运行得更快。此外,通过使用 .keys() 制作字典键列表并对该列表进行切片,您可以避免在构建新字典时“接触”任何不必要的键。

如果您不需要键(仅值),您可以使用列表理解:

 first2vals = [v for v in mydict.values()[:2]]

如果您需要根据键对值进行排序,那也不会更麻烦:

 first2vals = [mydict[k] for k in sorted(mydict.keys())[:2]]

或者如果您还需要钥匙:

 first2pairs = {k: mydict[k] for k in sorted(mydict.keys())[:2]}

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

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