我有此字典列表,其值作为列表:
>>> 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]}]
您认为这里有什么问题?
谢谢。
答案 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值)