使用列表类型的值(按列表值的顺序)从dict创建OrderedDict

时间:2016-02-10 16:56:56

标签: python algorithm

我用文字解释它有点困难,所以我将展示一个例子:

我的(data dict 实例):

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]}

应根据嵌套列表中的项目顺序更改键的顺序

3 个答案:

答案 0 :(得分:3)

list.size()

首先对值进行排序。如果您不需要原始的IndexOutOfBoundsException,那么可以这样做,但我做了一个临时变量。

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])) 是一个返回要排序的键的函数。在这种情况下,键是项元组(列表)的第二个元素,并且由于列表具有可比性,这就足够了。

答案 1 :(得分: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 :(得分:-2)

通常,你不应该担心字典本身的数据顺序,而是在检索字典的内容时jsut对它进行排序(即:迭代它):

data