我希望按优先顺序(*,/,+, - )对数学运算符元组(存储为字符串)及其索引的列表进行排序,同时保留其原始索引。我的列表中有数以千计的元组列表。
E.g。
my_lists = [[(0,'*'),(1,'+'),(2,'-')],[(0,'-'),(1,'*'),(2,'*')],[(0,'+'),(1,'/'),(2,'-')]]
应该成为:
new_list = [[(0,'*'),(1,'+'),(2,'-')],[(1,'*'),(2,'*'),(0,'-')],[(1,'/'),(0,'+'),(2,'-')]]
我尝试过使用'sorted'内置函数并将优先级存储在字典中。
priority = {'*': 0, '/': 1, '+': 2, '-': 3}
new_list = [sorted(item, key = priority.get) for item in my_lists]
这会生成相同的原始列表。
如何在排序元组列表时只访问元组的运算符部分?
答案 0 :(得分:1)
您正在使用整个元组作为键进行排序,例如(0, '*')
。您只能使用它的第二部分(即x[1]
):
[sorted(item, key = lambda x: priority.get(x[1])) for item in my_lists]
返回
[[(0, '*'), (1, '+'), (2, '-')],
[(1, '*'), (2, '*'), (0, '-')],
[(1, '/'), (0, '+'), (2, '-')]]
您的代码没有抛出错误,因为priority.get((0, '*'))
是合法的并返回None
,这在Python 2.7中是完全可排序的,并使列表保持原始顺序。