从一个有序字典获取前N个密钥对

2024-05-16 14:40:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个按值排序的有序字典(OrderedDict)。如何获取最上面的(比如说25个)键值并将它们添加到新字典中? 例如:我有这样的东西:

dictionary={'a':10,'b':20,'c':30,'d':5}
ordered=OrderedDict(sorted(dictionary.items(), key=lambda x: x[1],reverse=True))

现在ordered是一个有序字典,我想创建一个字典,比如通过获取前两个最频繁的项及其键:

frequent={'c':30,'b':20}

Tags: lambdakeytruedictionary字典排序itemsreverse
3条回答

只需使用(反向)有序字典中的前N个项(键对)创建一个新字典。例如,要获得前三项,可以执行以下操作:

from collections import OrderedDict
from operator import itemgetter

# create dictionary you have
dictionary = {'a': 10, 'b': 20, 'c': 30, 'd': 5}
ordered = OrderedDict(sorted(dictionary.items(), key=itemgetter(1), reverse=True))

topthree = dict(ordered.items()[:3])
print(topthree) # -> {'a': 10, 'c': 30, 'b': 20}

对于Python 3,可以使用dict(list(ordered.items())[:3]),因为items()返回该版本中的迭代器。或者您可以使用dict(itertools.islice(ordered.items(), 3)),它在Python 2和3中都可以工作。

还要注意,结果只是一个常规字典,正如您在问题中指定的那样,而不是collections.Counter或其他类型的映射。这种方法非常通用,不需要原始的dictionary具有整数值,只需要对事物进行排序(即通过key函数进行比较)。

^{}的主要目的是保持元素插入的顺序 这里需要的是^{},它内置了n个最常见的功能:

>>> dictionary={'a':10,'b':20,'c':30,'d':5}
>>> import collections
>>> collections.Counter(dictionary).most_common(2)
[('c', 30), ('b', 20)]

您是否尝试过从排序的元组列表中建立索引,以获取第n个最频繁的项及其键? 例如,如果您需要前两个最常见的项目,您可以

dictionary={'a':10,'b':20,'c':30,'d':5}
ordered=dict(sorted(dictionary.items(), key=lambda x: x[1],reverse=True)[:2])

相关问题 更多 >