通过元组的指定元素使用元组键对字典进行排序

时间:2018-03-29 15:08:16

标签: python python-3.x sorting dictionary

我有一个dict列表,dict键是像(0,5)

这样的元组

我想按元组[1]的值对列表进行排序。

我尝试使用方法列表排序的关键参数但我不知道在lambda中放入什么我试试这个: key= lambda k[[1]]

示例输入:[{(5,9): "item"}, {(0,4): "item"}]

预期:[{(0,4): "item"}, {(5,9): "item"}]

任何人都可以解释一下它是如何运作的?

3 个答案:

答案 0 :(得分:3)

如果你有类似的东西,这就是解决方案:

a = [{(0,7): 1},
     {(1,5): 2},
     {(4,6): 3}]

sorted(a, key=lambda x: list(x.keys())[0][1])
#[{(1, 5): 2}, {(4, 6): 3}, {(0, 7): 1}]

答案 1 :(得分:3)

对于词典列表,您可以使用:

lst = [{(5,9): "item"}, {(0,4): "item"}]

res = sorted(lst, key=lambda x: next(iter(x))[1])

[{(0, 4): 'item'}, {(5, 9): 'item'}]

术语next(iter(x))将字典键转换为迭代器,然后调用第一个项目。这是有效的,因为每个字典只有一个键。

请注意,正如@ juanpa.arrivillaga指出的那样,在迭代字典的键时不需要使用x.keys()iter(x)就足够了。

答案 2 :(得分:0)

您可以尝试这种方法:

data=[{(5,9): "item"}, {(0,1): "item"},{(1,4): "item"}]

print(sorted(data,key=lambda x:list(map(lambda y:y[1],x.keys()))[0]))

输出:

[{(0, 1): 'item'}, {(1, 4): 'item'}, {(5, 9): 'item'}]