我有一个dict列表,dict键是像(0,5)
我想按元组[1]的值对列表进行排序。
我尝试使用方法列表排序的关键参数但我不知道在lambda中放入什么我试试这个:
key= lambda k[[1]]
示例输入:[{(5,9): "item"}, {(0,4): "item"}]
预期:[{(0,4): "item"}, {(5,9): "item"}]
任何人都可以解释一下它是如何运作的?
答案 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'}]