考虑以下字典 d:
d = {'a': 3, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
我想从 d 返回前 N 个键值对(在本例中为 N <= 4)。最有效的方法是什么?
原文由 Jason Strimpel 发布,翻译遵循 CC BY-SA 4.0 许可协议
考虑以下字典 d:
d = {'a': 3, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
我想从 d 返回前 N 个键值对(在本例中为 N <= 4)。最有效的方法是什么?
原文由 Jason Strimpel 发布,翻译遵循 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 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
4 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答869 阅读✓ 已解决
1 回答1.7k 阅读✓ 已解决
没有“前 n 个”键这样的东西,因为
dict
不记得先插入了哪些键。您可以获得 任何 n 个键值对:
这使用了
take
来自itertools
食谱 的实现:在线查看它: ideone
对于 Python < 3.6