旋转python列表

时间:2018-11-06 09:19:39

标签: python

任何人都可以通过代码/命令帮助我,这些代码/命令将以下数据透视成列/行:

[('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中。

谢谢!

2 个答案:

答案 0 :(得分:1)

必须有一个更短,更容易的方法,但这就是我所做的(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)

答案 1 :(得分:0)

很抱歉给僵尸发贴,但是根据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]]

Python文档: Data Structures: Nested List Comprehensions

希望这有助于下一个人找到此帖子=)