【问题标题】:Python tuple listPython 元组列表
【发布时间】:2012-11-23 20:48:04
【问题描述】:

你能帮我转换一下 Python 列表吗:

[(1, 'a'), (2, 'b'), (2, 'c'), (3, 'd'), (3, 'e')]

这样: (1, 'a') 是索引 0

(2, 'b'), (2, 'c') 都是索引 1

(3, 'd'), (3, 'e') 都是索引 2

简单地说,所有 element[0] 相等的元组都有相同的索引。

谢谢你,

【问题讨论】:

    标签: python list tuples


    【解决方案1】:

    itertools.groupby 来救援!:

    lst = [(1, 'a'), (2, 'b'), (2, 'c'), (3, 'd'), (3, 'e')]
    lst.sort(key=lambda x: x[0])  #Only necessary if your list isn't sorted already.
    new_lst = [list(v) for k,v in itertools.groupby(lst,key=lambda x:x[0])]
    

    如果您愿意,可以使用 operator.itemgetter(0) 代替 lambda...

    演示:

    >>> import itertools
    >>> lst = [(1, 'a'), (2, 'b'), (2, 'c'), (3, 'd'), (3, 'e')]
    >>> lst.sort(key=lambda x: x[0])
    >>> new_lst = [list(v) for k,v in itertools.groupby(lst,key=lambda x:x[0])]
    >>> new_lst
    [[(1, 'a')], [(2, 'b'), (2, 'c')], [(3, 'd'), (3, 'e')]]
    

    【讨论】:

      【解决方案2】:

      不清楚你想要什么,但这会根据项目的第一个元素将项目分组到列表中。

      groups = collections.defaultdict(list)
      for x,y in items:
          groups[x].append(y)
      

      【讨论】:

      • @Jon 不敢相信我错过了那个错字。很抱歉没有仔细校对。
      猜你喜欢
      • 1970-01-01
      • 2011-01-15
      • 2017-12-06
      • 2018-02-25
      • 2014-07-04
      • 1970-01-01
      • 2011-07-27
      • 2017-11-28
      • 1970-01-01
      相关资源
      最近更新 更多