不同dict的Python排序列表



我有下面的dict列表,需要按键和值对不同的dict进行排序

[{'label': [{'href': '/orgs/x/labels/xx'}]},
{'ip_list': [{'href': '/orgs/x/sec_policy/draft/ip_lists/12'},
{'href': '/orgs/x/sec_policy/draft/ip_lists/11'}]}]

需要此输出

[{'ip_list': [{'href': '/orgs/x/sec_policy/draft/ip_lists/11'},
{'href': '/orgs/x/sec_policy/draft/ip_lists/12'}]},
{'label': [{'href': '/orgs/x/labels/xx'}]}]

此外,dict的列表并不总是有labels和ip_lists的键。可能是其中之一,也可能是两者兼而有之

或者可以是

[{'label': [{'href': '/orgs/x/labels/xx'}]},
{'ip_list': [{'href': '/orgs/x/sec_policy/draft/ip_lists/12'}]}]

我想要的输出

[{'ip_list': [{'href': '/orgs/x/sec_policy/draft/ip_lists/12'}]},
{'label': [{'href': '/orgs/x/labels/xx'}]}]

或者可以是

[{'ip_list': [{'href': '/orgs/x/sec_policy/draft/ip_lists/12'}, {'href': '/orgs/x/sec_policy/draft/ip_lists/11'}]}]

我想要的输出

[{'ip_list': [{'href': '/orgs/x/sec_policy/draft/ip_lists/11'}, {'href': '/orgs/x/sec_policy/draft/ip_lists/12'}]}]

您可以使用lambda函数对键进行排序。您可以对键使用list((并使用第0项,以避免"TypeError:"dict_keys"object is not subscriptable":

dict1_list = [{'label': {'href': '/orgs/x/labels/xx'}},
{'ip_list': [{'href': '/orgs/x/sec_policy/draft/ip_lists/xx'},
{'href': '/orgs/x/sec_policy/draft/ip_lists/xx'}]}]
dict1_list.sort(key=lambda x: list(x.keys())[0])
print(dict1_list)
# [{'ip_list': [{'href': '/orgs/x/sec_policy/draft/ip_lists/xx'}, {'href': '/orgs/x/sec_policy/draft/ip_lists/xx'}]}, 
{'label': {'href': '/orgs/x/labels/xx'}}]

最新更新