Python:对这个字典(字典中的字典)进行排序

19 投票
5 回答
14508 浏览
提问于 2025-04-16 07:55
d = { 'a':{'k':1, 'b':'whatever'},  'b':{'k':2, 'b':'sort by k'} }

想要在Python中按键k将这个字典按降序排序。

有点棘手,请帮忙。

5 个回答

3

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,尤其是当我们不太了解这些工具的工作原理时。

比如,有人可能在使用某个库时,发现它的某个功能没有按预期工作。这时候,他们可能会去网上搜索解决方案,或者在像StackOverflow这样的论坛上提问。

在提问时,提供足够的信息是非常重要的。这样其他人才能更好地理解你的问题,并给出有效的建议。通常需要说明你在做什么、遇到了什么问题,以及你尝试过哪些解决办法。

总之,遇到问题时,不要害怕寻求帮助,记得把问题描述清楚,这样才能更快找到解决方案。

from collections import OrderedDict
from operator import *

d = { 'a':{'k':1, 'b':'whatever'},  'b':{'k':2, 'b':'sort by k'} }
sorted_d = OrderedDict(sorted(d.items(), key=lambda x: getitem(x[1], 'k')))
5

如果你使用的是Python 2.7或更高版本,可以使用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)])

如果你想在Python 2.4或更低版本中实现类似的效果,可以参考:

这是一个可以替代Python 2.7中新引入的collections.OrderedDict的工具,适用于Python 2.4到2.6版本。

21

dict(字典)是无序的。这意味着你不能直接对它们进行排序。不过,如果你愿意把字典转换成一个包含(键,值)元组的列表,那么你就可以这样做:

In [9]: d
Out[9]: {'a': {'b': 'whatever', 'k': 1}, 'b': {'b': 'sort by k', 'k': 2}}

In [15]: sorted(d.items(),key=lambda x: x[1]['k'],reverse=True)
Out[15]: [('b', {'b': 'sort by k', 'k': 2}), ('a', {'b': 'whatever', 'k': 1})]

这个很棒的小教程解释了如何使用key参数。

撰写回答