【问题标题】:how to sort list of tuples within a list?如何对列表中的元组列表进行排序?
【发布时间】:2016-01-11 13:45:13
【问题描述】:

我想按优先顺序 (*,/,+,-) 对数学运算符的元组列表(存储为字符串)及其索引进行排序,同时保留它们的原始索引。我的列表中有数千个元组列表。

例如

my_lists = [[(0,'*'),(1,'+'),(2,'-')],[(0,'-'),(1,'*'),(2,'*')],[(0,'+'),(1,'/'),(2,'-')]]

应该变成:

new_list = [[(0,'*'),(1,'+'),(2,'-')],[(1,'*'),(2,'*'),(0,'-')],[(1,'/'),(0,'+'),(2,'-')]]

我尝试使用“排序”内置函数并将优先级存储在字典中。

priority = {'*': 0, '/': 1, '+': 2, '-': 3}

new_list = [sorted(item, key = priority.get) for item in my_lists]

这会产生相同的原始列表。

如何在对元组列表进行排序时仅访问元组的运算符部分?

【问题讨论】:

  • 你尝试了什么?展示你的方法,其他人可能会帮助你完成它,但 StackOverflow 不是编码服务......

标签: python-2.7 sorting tuples


【解决方案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 中是完全可排序的,并保持列表的原始顺序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多