这是我在 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 传递给了不是字典而是元组的东西。您需要更深入地了解字典。
