这是我在python中的列表:
override func viewDidLoad() {
super.viewDidLoad()
mainScrollView.frame = view.frame
imageArray = [#imageLiteral(resourceName: "help0"), #imageLiteral(resourceName: "help1"), #imageLiteral(resourceName: "help2"), #imageLiteral(resourceName: "help3"), #imageLiteral(resourceName: "help4")]
for i in 0..<imageArray.count{
let imageView = UIImageView()
imageView.image = imageArray[i]
imageView.contentMode = .scaleAspectFit
let xPosition = self.view.frame.width * CGFloat(i)
imageView.frame = CGRect(x: xPosition , y: 0, width: self.mainScrollView.frame.width, height: self.mainScrollView.frame.height)
mainScrollView.contentSize.width = mainScrollView.frame.width * CGFloat(i + 1)
mainScrollView.addSubview(imageView)
self.view.sendSubview(toBack: mainScrollView)
}
我需要对此列表进行排序,以便根据team_name按字母顺序排序输出。请注意team_name是字典的一部分,它是列表的“值”。 所以输出应该是这样的:
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})]
我试过了:
[('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})]
但这给了我一个错误 请帮我解决排序功能。
答案 0 :(得分:3)
您的输入数据不是字典,而是list
tuples
。每个tuple
第二个元素是您要用于使用给定值排序的字典。
sorted_team_map = sorted(team_map, key=lambda x : x[1]['team_name'])
否.items()
并在访问密钥
如何在将来修复此类错误? (我如何修复您的代码?):
AttributeError: 'list' object has no attribute 'items'
错误。哪一个调用items()
?:team_map
。所以team_map
毕竟是list
,不需要函数来迭代列表TypeError: tuple indices must be integers, not str
。那是因为itemgetter
将您的密钥传递给了不是字典而是tuple
的东西。你需要更深层次才能到达你的字典。答案 1 :(得分:2)
您需要访问存储在sorted
键中每个元组中最后位置的字典,并使用为"team_name"
存储的值:
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})]
final_team = sorted(team_map, key=lambda x:x[-1]['team_name'])
输出:
[('32955', {'team_sdsk_list': [{'sdsk_summary': 'Task - BSDM Product Readiness (MiFIR Transparency Data package)', 'parent_target_launch_date': '2017-08-21', 'sdsk_number': 1234, 'attributes': [{'status': 'Complete', 'label': 'DL CONTENT<BR>UPDATED'}], 'parent_sdsk_number': 774079489, 'parent_sdsk_product_mgr': 'xyz', 'rep': 'abc', 'parent_sdsk_summary': 'Data Package'}], 'completed': 1, 'in_progress': 0, 'team_name': 'BSDM', 'not_started': 0}), ('31983', {'team_sdsk_list': [], 'completed': 0, 'in_progress': 0, 'team_name': 'Commercials', 'not_started': 0}), ('32935', {'team_sdsk_list': [], 'completed': 0, 'in_progress': 0, 'team_name': 'DL Platform', 'not_started': 0})]
答案 2 :(得分:2)
因此,您希望根据字典的team_map
属性对"team_name"
列表进行排序,该字典是每个tuple
中的第二个元素。
为此,我们采用t
(tuple
)并使用t[1]
(字典)获取第二个元素,并根据["team_name"]
属性进行排序:< / p>
sorted(team_map, key=lambda t: t[1]["team_name"])
给出了预期的输出:
[('32955', {'team_name': 'BSDM', 'team_sdsk_list': [{'parent_target_launch_date': '2017-08-21', 'parent_sdsk_number': 774079489, 'parent_sdsk_product_mgr': 'xyz', 'parent_sdsk_summary': 'Data Package', 'sdsk_summary': 'Task - BSDM Product Readiness (MiFIR Transparency Data package)', 'attributes': [{'label': 'DL CONTENT<BR>UPDATED', 'status': 'Complete'}], 'sdsk_number': 1234, 'rep': 'abc'}], 'completed': 1, 'in_progress': 0, 'not_started': 0}), ('31983', {'team_name': 'Commercials', 'team_sdsk_list': [], 'completed': 0, 'in_progress': 0, 'not_started': 0}), ('32935', {'team_name': 'DL Platform', 'team_sdsk_list': [], 'completed': 0, 'in_progress': 0, 'not_started': 0})]
请注意,不是使用内置的sorted()
函数,而是将结果分配回team_map
(这是我假设你会做的)。您还可以使用sort
team_map.sort
列出team_map.sort(key=lambda t: t[1]["team_name"])
列表。
所以你可以用以下方法获得与上面相同的结果:
.hero{
position: absolute;
width: 1200px;
margin-left: 0;
margin-top: 0;
}