2013-07-21 65 views
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

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

>>> 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] 
+0

Damnit。很近。非常感谢你。 – Faller

+0

@Faller不客气:)。 – TerryA

+0

所以,如果我把它包装在字典()它会立即因为未分类,正确? – Faller

1

lambda s为匿名函数,但他们只能在Python执行表达式:

lambda pair: pair[1][0] 

你也可以把它写得详细:

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

sorted(some_dict.items(), key=sorting_func) 
相关问题