Skip to main content
 首页 » 编程设计

python之对键值列表进行排序,其中值是字典,并且需要对字典中的 STRING 值进行排序

2025年05月04日12hnrainll

这是我在 python 中的列表:

team_map = [('31983', {'team_sdsk_list': [], 'team_name': 'Commercials', 'in_progress': 0, 'completed': 0, 'not_started': 0}), 
 ('32935', {'team_sdsk_list': [], 'team_name': 'DL Platform', 'in_progress': 0, 'completed': 0, 'not_started': 0}), 
 ('32955', {'team_sdsk_list': [{'sdsk_summary': 'Task - BSDM Product Readiness (MiFIR Transparency Data package)', 'parent_target_launch_date': '2017-08-21', 'parent_sdsk_number': 774079489, 'attributes': [{'status': 'Complete', 'label': 'DL CONTENT<BR>UPDATED'}], 'rep': 'abc', 'parent_sdsk_product_mgr': 'xyz', 'sdsk_number': 1234, 'parent_sdsk_summary': 'Data Package'}], 'team_name': 'BSDM', 'in_progress': 0, 'completed': 1, 'not_started': 0})] 

我需要对这个列表进行排序,以便输出根据 team_name 按字母顺序排列。注意 team_name 是字典的一部分,它是列表的“值”。 所以输出应该是这样的:

[('32955', {'team_sdsk_list': [{'sdsk_summary': 'Task - BSDM Product Readiness (MiFIR Transparency Data package)', 'parent_target_launch_date': '2017-08-21', 'parent_sdsk_number': 774079489, 'attributes': [{'status': 'Complete', 'label': 'DL CONTENT<BR>UPDATED'}], 'rep': 'abc', 'parent_sdsk_product_mgr': 'xyz', 'sdsk_number': 1234, 'parent_sdsk_summary': 'Data Package'}], 'team_name': 'BSDM', 'in_progress': 0, 'completed': 1, 'not_started': 0}), 
('31983', {'team_sdsk_list': [], 'team_name': 'Commercials', 'in_progress': 0, 'completed': 0, 'not_started': 0}), 
('32935', {'team_sdsk_list': [], 'team_name': 'DL Platform', 'in_progress': 0, 'completed': 0, 'not_started': 0})] 

我试过这个:

sorted_team_map = sorted(team_map.items(), key=operator.itemgetter('team_name')) 

但这给了我一个错误。
请帮助我使用排序功能。

请您参考如下方法:

您的输入数据不是字典,而是元组的列表。每个 tuple 第二个元素是您要使用给定值排序的字典。

sorted_team_map = sorted(team_map, key=lambda x : x[1]['team_name']) 

没有 .items() 并在访问 key 之前获取元组的第二项

以后如何解决此类错误? (我是如何修复您的代码的?):

  • 您的第一次尝试触发了 AttributeError: 'list' object has no attribute 'items' 错误。哪个调用 items() ?:team_map。所以 team_map 毕竟是一个 list,不需要函数在列表上迭代
  • 修复后,您会收到第二个错误:TypeError: tuple indices must be integers, not str。那是因为 itemgetter 将您的 key 传递给了不是字典而是 元组 的东西。您需要更深入地了解字典。