代码之家  ›  专栏  ›  技术社区  ›  jqwha

透视python列表

  •  -8
  • jqwha  · 技术社区  · 5 年前

    [('A', '1'),
     ('A', '2'),
     ('A', '3'),
     ('B', '4'),
     ('B', '5'),
     ('C', '6'),
     ('C', '7')]
    

    进入

    [('A', 'B', 'C'),
    ('1', '4', '6'),
    ('2', '5', '7'),
    ('3', '', '')]
    

    我将使用选项卡分隔数据,以便将其粘贴到Excel中。

    谢谢

    1 回复  |  直到 5 年前
        1
  •  2
  •   CIsForCookies    5 年前

    必须有一个较短的&更简单的方法,但我就是这么做的( demo ):

    a = [('A', '1'),
     ('A', '2'),
     ('A', '3'),
     ('B', '4'),
     ('B', '5'),
     ('C', '6'),
     ('C', '7')]
    
    
    unique_keys = tuple(sorted(set(k for k,v in a)))
    print(unique_keys)
    
    values = tuple(sorted(v for k,v in a))
    print(values)
    
    ls = [unique_keys, ]
    default = ''
    
    # the sorted part allows me to iterate without checking which key I'm adding 
    while len(a):
        tmp = []
        for uk in unique_keys:
            uk_added = False
            for k,v in a:
                if k == uk:
                    tmp.append(v)
                    a.remove((k,v))
                    uk_added = True
                    break
            if not uk_added:
                tmp.append(default)
    
        ls.append(tmp)
    
    print(ls)
    
        2
  •  0
  •   Rod Manning    3 年前

    对于僵尸帖子,我很抱歉,但根据python docs的建议,我自己解决了这个问题,使用以下列表:

    >>> matrix = [
    ...     [1, 2, 3, 4],
    ...     [5, 6, 7, 8],
    ...     [9, 10, 11, 12],
    ... ]
    
    >>> [[row[i] for row in matrix] for i in range(4)]
    
    [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
    

    Data Structures: Nested List Comprehensions