在不知道键/值的情况下对字典列表进行排序

问题描述 投票:0回答:2

我的代码中的函数(

F1
)返回一个字典列表。我需要对这个字典列表进行排序并将其打印出来。我们对列表进行升序或降序排序并不重要,只要它们一致即可。问题是,
F1
每次都可能返回完全不同的字典列表:长度、键、值,一切都可能不同,而且我无法提前知道。

如何安全、一致地对这样的列表进行排序?我有这个:

sorted_list = sorted(list_to_be_sorted, key=lambda k: k['name'])

但它在我的情况下不起作用,因为我可能有一个不包含“名称”的列表。

python python-3.x list sorting dictionary
2个回答
4
投票

假设所有密钥都相同,这可能就是您所需要的:

list_to_be_sorted = [{"name": 3}, {"name": 2}, {"name": 4}, {"name": 1}]
sorted_list = sorted(list_to_be_sorted, key=lambda k: k[[*k][0]])

输出:

[{'name': 1}, {'name': 2}, {'name': 3}, {'name': 4}]

1
投票

一种解决方案是使用

dict.get
。如果字典中不存在该键,则返回
None
(如果需要,也可以返回其他默认值):

sorted_list = sorted(list_to_be_sorted, key=lambda k: k.get('name'))

请记住,了解类型在这里很重要,因为当找不到键时,您可能会因值类型不匹配而出现以下类型的错误:

TypeError: '>' not supported between instances of 'str' and 'NoneType'

如果您正在处理的数据结构在您尝试排序的每条数据中并不总是具有

key
,则可能会出现这种情况。

为了避免这种情况,如果您确实知道要排序的值的类型,请相应地在

get
中设置默认类型。

示例:

# string
k.get('name', '')

# int
k.get('name', 0)
© www.soinside.com 2019 - 2024. All rights reserved.