首页 > 解决方案 > 不同字典的Python排序列表

问题描述

我有下面的字典列表,需要对每个键和值的不同字典进行排序

[{'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 列表并不总是具有标签和 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'}]}]

标签: python

解决方案


您可以使用 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'}}]

推荐阅读