对包含列表作为值的字典列表进行排序

时间:2018-10-21 21:31:34

标签: python python-3.x list sorting dictionary

我有此字典列表,其值作为列表:

>>> lod
[{'A': ['100', '200', '300', 600]}, {'B': ['1000', '2000', '3000', 6000]}, {'C': ['1', '2', '3', 6]}]

基本上,我需要根据每个词典列表中的最后一项对列表进行排序。

所以我使用了sorted(),但是没有按预期工作:

>>> sorted(lod, key= lambda x: lod[0][''.join(list(lod[0].keys()))][3])

[{'A': ['100', '200', '300', 600]}, {'B': ['1000', '2000', '3000', 6000]}, {'C': ['1', '2', '3', 6]}]

您认为这里有什么问题?

谢谢。

3 个答案:

答案 0 :(得分:2)

问题在于key参数不是这样工作的。它应该是在排序算法中像这样使用的函数:

if key(a) < key(b):
    # sort this way

因此,它需要返回要比较的值:

sorted(lod, key=lambda elem: next(iter(elem.values()))[-1])

答案 1 :(得分:0)

如果我们假设您所有的字典都有一对(键,值)对,并且值列表的最后一个元素是整数,则以下解决方案应符合您的条件。

>>> l = [{'A': ['100', '200', '300', 600]}, {'B': ['1000', '2000', '3000', 6000]}, {'C': ['1', '2', '3', 6]}]
>>> 
>>> criterion = lambda dict_: tuple(dict_.values())[0][-1]
>>> sorted(l, key=criterion)
>>> 
[{'C': ['1', '2', '3', 6]},
 {'A': ['100', '200', '300', 600]},
 {'B': ['1000', '2000', '3000', 6000]}]    

tuple(dict_.values())为每个内部字典构造一个值的元元素元组,[0]从该元组中获取列表,而[-1]获取该列表中的最后一个元素作为排序-准则。

答案 2 :(得分:0)

sorted(lod, key=lambda d: list(d.values())[0][-1])

会做到的。说明:list(d.values())[0]将返回字典中的唯一值,[-1]将返回字典的最后一项(用于排序的int值)