使用列表值(按列表值的顺序)从字典创建有序字典。

3

我觉得用语言来解释有些困难,所以我会举一个例子:

我拥有的(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]}

与嵌套列表项的顺序相对应,应更改键的顺序。


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
3个回答

3
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是一个函数,返回要排序的关键字。在这种情况下,关键字是项目元组(列表)的第二个元素,由于列表是可比较的,因此这已经足够好了。


@inspectorG4dget,它在2或3中都可以工作。 sorted接受可迭代对象。 - jpkotta

2
您可以通过对项目和值进行排序来使用 OrderedDict
>>> 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])])

-2
通常情况下,您不必担心字典本身中的数据顺序,而是在检索字典内容时对其进行排序(即:迭代它)。
data = {'a':[4,5,3], 'b':[1,0,2], 'c':[6,7,8]}
for datum in sorted(data.items(), key=lambda item: item[1]):
    ...

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