按值对具有不同键的词典进行排序

2024-10-05 22:00:40 发布

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

我有一个字典列表,只有一个键和一个值。关键点总是不同的,值是浮点数。如何按值排序

example_list = [{'c47-d75 d75-e6b e6b-ff1 ff1-6d6 6d6-e63 e63-80c': 292.1799470129255}, {'805-7fd': 185.56518334219}, {'805-dd3 dd3-088 088-dd3 dd3-80c': 368.5010685728143}, {'805-6b5': 145.897977770909}, {'77e-805 805-7fd': 326.693786870932}, {'323-83d': 131.71963170528})

结果应按值排序,因此第一项应为

{'805-dd3 dd3-088 088-dd3 dd3-80c': 368.5010685728143}

你能帮忙吗


Tags: 列表字典排序examplelist关键点浮点数ff1
3条回答

您可以创建按值排序的新词典,如下所示:

{k: v for k, v in sorted(example_dict.items(), key=lambda item: item[1], reverse = True)}

由于希望值按降序排序,因此应保留参数reverse=True,否则升序将其设置为False

要根据字典的第一个值对列表进行排序,请将函数传递给sorted(),以提取字典的第一个值

  1. d.values()返回字典值的iterable
  2. iter()生成字典值的迭代器
  3. 由于只有1个字典值(根据假设),因此在迭代器上调用next()将返回第一个(也是唯一的)值

要按最大值到最小值排序,请将reverse=True关键字参数传递给sorted()

def first_value(d):
    return next(iter(d.values()))

example_list = [{'c47-d75 d75-e6b e6b-ff1 ff1-6d6 6d6-e63 e63-80c': 292.1799470129255}, {'805-7fd': 185.56518334219}, {'805-dd3 dd3-088 088-dd3 dd3-80c': 368.5010685728143}, {'805-6b5': 145.897977770909}, {'77e-805 805-7fd': 326.693786870932}, {'323-83d': 131.71963170528}]

sorted_list = sorted(example_list, key=first_value, reverse=True)

print(sorted_list[0])

这里有一个稍微不同的方法:

>>> for d in sorted(example_list, key=lambda d: max(d.values()), reverse=True):
...     print(d)
...
{'805-dd3 dd3-088 088-dd3 dd3-80c': 368.5010685728143}
{'77e-805 805-7fd': 326.693786870932}
{'c47-d75 d75-e6b e6b-ff1 ff1-6d6 6d6-e63 e63-80c': 292.1799470129255}
{'805-7fd': 185.56518334219}
{'805-6b5': 145.897977770909}
{'323-83d': 131.71963170528}

这通过对与每个字典关联的值使用max()函数进行排序。因为每个字典中只有一个值,所以它只返回该值

老实问,为什么要有一个字典列表而不是一个包含键值对的字典

相关问题 更多 >