元组合并列表

问题描述 投票:0回答:2

我在处理其中的元组列表时遇到问题。

如果我有一个像这样的元组列表:

list = [('1', 'a'), ('2', 'b'), ('3', 'c'), ('3', 'd'), ('4', 'e'), ('4', 'f'), ('5', 'g')]

但我希望将其格式化为这样,其中每个数字只有一个,并带有这些数字后面的字母列表,而不是它们全部分开:

list = [('1', ['a']), ('2', ['b']), ('3', ['c', 'd']), ('4', ['e', 'f']), ('5', ['g'])]

采取什么方法?

python list tuples
2个回答
0
投票

创建一个分组字典,其中键是元组中的第一个值,值是列表。然后你可以将这个字典转换为最终列表:

lst = [
    ("1", "a"),
    ("2", "b"),
    ("3", "c"),
    ("3", "d"),
    ("4", "e"),
    ("4", "f"),
    ("5", "g"),
]

out = {}
for a, b in lst:
    out.setdefault(a, []).append(b)

out = list(out.items())
print(out)

打印:

[('1', ['a']), ('2', ['b']), ('3', ['c', 'd']), ('4', ['e', 'f']), ('5', ['g'])]

0
投票

这是

itertools.groupby
完成的操作。一个简单的例子,假设你的列表已经正确排序,看起来像

>>> from itertools import groupby
>>> L = [('1', 'a'), ('2', 'b'), ('3', 'c'), ('3', 'd'), ('4', 'e'), ('4', 'f'), ('5', 'g')]
>>> [(k, [x for _, x in v]) for k, v in groupby(L, key=lambda x: x[0])]
[('1', ['a']), ('2', ['b']), ('3', ['c', 'd']), ('4', ['e', 'f']), ('5', ['g'])]

groupby
的结果是键(由
key
参数定义)到共享每个键的列表中的对象的映射。
[x for _, x in v]
提取原始元组的非关键部分。

© www.soinside.com 2019 - 2024. All rights reserved.