【问题标题】:Sorting Lists of tuples based on a list of tuples - Python基于元组列表对元组列表进行排序 - Python
【发布时间】:2011-04-16 10:45:55
【问题描述】:

我正在尝试根据另一个元组列表按该列表中的键对元组列表进行排序。

假设我有以下内容:

list1 = [(5, 'something'),(2,'bobby'),(9,'suzy'),(6,'crab')]
list2 = [('something','othervalues'),('suzy','stuff'),('bobby','otherthings')]

由此我将收到 list1 中每个元组的第一个元素的输出排序。

sorted = [('suzy','stuff'),('something','othervalues'),('bobby','otherthings') ]

所以本质上它执行一个交集,然后按 list1 元组中的第一个元素对剩余值进行排序。

我不知道该怎么做,所以任何帮助都会很棒。

【问题讨论】:

    标签: python sorting tuples


    【解决方案1】:

    按照描述的去做,根据另一个元组列表按该列表中的键对一个元组列表进行排序:

    rank = {key:rank for rank, key in list1}
    print(sorted(list2, key=lambda t: rank.get(t[0]), reverse=True))
    

    【讨论】:

      【解决方案2】:

      首先从list1创建一个字典:

      >>> order = dict(reversed(t) for t in list1)
      

      这会创建一个name -> number 映射。

      然后您可以使用sorted 方法(不要以这种方式命名您的变量)和lambda 表达式为key

      >>> sorted(list2, key=lambda x: order[x[0]], reverse=True)
      [('suzy', 'stuff'), ('something', 'othervalues'), ('bobby', 'otherthings')]
      

      或者,如果您想就地排序:

      >>> list2.sort(key=lambda x: order[x[0]], reverse=True)
      

      值得一读:Sorting Mini-HOW TO

      【讨论】:

        【解决方案3】:

        list2dict 很容易,像这样:

        {'bobby': 'otherthings', 'something': 'othervalues', 'suzy': 'stuff'}
        

        Python 将为您进行转换:

        >>> dict2 = dict(list2)
        

        然后你可以使用list comprehension:

        >>> [(k,dict2[k]) for _,k in sorted(list1, reverse=True) if k in dict2]
        [('suzy', 'stuff'), ('something', 'othervalues'), ('bobby', 'otherthings')]
        

        注意:sorted 是一个内置的 Python 函数,不适合用作变量名。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-29
          • 2015-01-28
          相关资源
          最近更新 更多