1

我知道字典是不可排序的,话虽如此,我想要字典的表示形式,该表示形式是根据作为列表的值进行排序的。例子:

some_dict= {
    "a": [0, 0, 0, 0, 0],
    "b": [1400, 50, 30, 18, 0],
    "c": [800, 30, 14, 14, 0],
    "d": [5000, 100, 30, 50, .1],
    "for fun": [140000, 1400, 140, 140, .42]
}

我想按每个列表中的第一项进行排序。

我试过类似的东西:

sorted(some_dict.items(), key = lambda for x in some_dict: some_dict[x][0])

但我得到无效的语法。

提前致谢。

4

2 回答 2

4

你在正确的轨道上,但你不能在 lambda 中放置一个 for 循环(因此出现错误):

>>> sorted(some_dict.items(), key=lambda x: x[1][0])
[('a', [0, 0, 0, 0, 0]), ('c', [800, 30, 14, 14, 0]), ('b', [1400, 50, 30, 18, 0]), ('d', [5000, 100, 30, 50, 0.1]), ('for fun', [140000, 1400, 140, 140, 0.42])]

如果您想将此顺序保存在字典中,可以使用collections.OrderedDict

>>> from collections import OrderedDict
>>> mydict = OrderedDict(sorted(some_dict.items(), key=lambda x: x[1][0]))
>>> print(mydict)
OrderedDict([('a', [0, 0, 0, 0, 0]), ('c', [800, 30, 14, 14, 0]), ('b', [1400, 50, 30, 18, 0]), ('d', [5000, 100, 30, 50, 0.1]), ('for fun', [140000, 1400, 140, 140, 0.42])])
>>> print(mydict['a'])
[0, 0, 0, 0, 0]
于 2013-07-21T01:32:35.663 回答
1

lambdas 是匿名函数,但它们只能在 Python 中执行表达式:

lambda pair: pair[1][0]

你也可以详细地写它:

def sorting_func(pair):
    key, value = pair
    return value[0]

sorted(some_dict.items(), key=sorting_func)
于 2013-07-21T01:35:28.083 回答