字典排序和去重

3

我在Python中遇到了字典和排序问题,我有以下数值存储在一个字典中:

{'PersonA': 87.0, 'PersonB': 89.0, 'PersonC': 101, 'PersonD': 94, 'PersonE': 112}

我希望你能:

1)按照最高分到最低分的顺序对它们进行排序
2)从字典中删除得分,只留下名称

例如,在上面的示例中,该函数应返回:

['PersonE', 'PersonC', 'PersonD', 'PersonB', 'PersonA']
4个回答

7
你可以轻松使用 sorted 来完成这个任务:
>>> d = {'PersonA': 87.0, 'PersonB': 89.0, 'PersonC': 101, 'PersonD': 94, 'PersonE': 112}
>>> sorted(d, key=d.get, reverse=True)
['PersonE', 'PersonC', 'PersonD', 'PersonB', 'PersonA']
>>>

请注意输出的是一个名称列表。在Python中,您无法对字典或集合进行排序,因为它们都是自然无序的。

很高兴知道,我不知道你可以对字典进行排序! - Reut Sharabani
@ReutSharabani - 你不能对字典进行排序。这只是遍历字典的键并将它们收集到一个排序列表中,使用dict.get来确定顺序。 - user2555451
我知道,我的意思是直接在字典键上使用“sorted”。另一方面,您可以像“列表”或“元组”一样遍历它们,那为什么不呢... - Reut Sharabani

2
您可以按照以下步骤操作:
d1 = {'PersonA': 87.0, 'PersonB': 89.0, 'PersonC': 101, 'PersonD': 94, 'PersonE': 112}
print([n for n,s in sorted(d1.items(), key=lambda v:v[1], reverse=True)])

这会导致:
['PersonE', 'PersonC', 'PersonD', 'PersonB', 'PersonA']

0

无法对字典进行排序,因为字典是无序的,但其他类型,如列表和元组,则不是。但您可以获得已排序的表示。

例如,

import operator
x = {first: 2, second: 4, third:3, fourth:1, fifth:0}
sorted_x = sorted(x.items(), key=operator.itemgetter(1))

或者你也可以这样做

sorted(x.values()) to get a sorted representation.

0

保留字典并对其进行排序的选项:

>>>from collections import OrderedDict

>>> # regular unsorted dictionary
>>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

>>> # dictionary sorted by key
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

>>> # dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

>>> # dictionary sorted by length of the key string
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])

详情:sorted函数有一个reverse(bool)参数,例如:

>>> OrderedDict(sorted(d.items(), key=lambda t: t[0], reverse = True))
OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

使用方法很正常:

>>> dic = OrderedDict(sorted(d.items(), key=lambda t: t[0]))
>>> dic['banana']
3

字体:https://docs.python.org/2/library/collections.html#ordereddict-examples-and-recipes


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接