我觉得用语言来解释有些困难,所以我会举一个例子:
我拥有的(data
是一个字典实例):
data = {'a':[4,5,3], 'b':[1,0,2], 'c':[6,7,8]}
我需要的是(
ordered_data
是一个 OrderedDict 实例):ordered_data = {'b':[0,1,2], 'a':[3,4,5], 'b':[6,7,8]}
与嵌套列表项的顺序相对应,应更改键的顺序。
tmp = {k:sorted(v) for k,v in data.items()}
ordered_data = OrderedDict((k,v) for k,v in sorted(tmp.items(), key=lambda i: i[1]))
首先对数值进行排序。如果您不需要原始的data
,可以直接在原地进行操作,但我创建了一个临时变量。
key
是一个函数,返回要排序的关键字。在这种情况下,关键字是项目元组(列表)的第二个元素,由于列表是可比较的,因此这已经足够好了。
sorted
接受可迭代对象。 - jpkottaOrderedDict
:>>> from operator import itemgetter
>>> from collections import OrderedDict
>>> d = OrderedDict(sorted([(k, sorted(v)) for k, v in data.items()], key=itemgetter(1)))
>>> d
OrderedDict([('b', [0, 1, 2]), ('a', [3, 4, 5]), ('c', [6, 7, 8])])
data = {'a':[4,5,3], 'b':[1,0,2], 'c':[6,7,8]}
for datum in sorted(data.items(), key=lambda item: item[1]):
...
ordered_data = {'b':[0,1,2], 'a':[3,4,5], 'b':[6,7,8]}
修改为ordered_data = {'b':[0,1,2], 'a':[3,4,5], 'c':[6,7,8]}
。 - depperm