元组格式化列表

问题描述 投票: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
投票

您可以使用字典临时存储从数字到字母的映射来实现所需的格式,然后将该字典转换回元组列表。具体方法如下:

蟒蛇 复制代码 原始列表 = [('1', 'a'), ('2', 'b'), ('3', 'c'), ('3', 'd'), ('4', 'e '), ('4', 'f'), ('5', 'g')]

用于存储映射的临时字典

temp_dict = {}

迭代原始列表

对于original_list中的数字、字母: 如果数字不在 temp_dict 中: temp_dict[number] = [letter] # 如果数字不在字典中则创建一个新列表 别的: temp_dict[number].append(letter) # 将字母追加到现有列表中

将字典转换回元组列表

formatted_list = list(temp_dict.items())

打印(格式化列表) 这将输出:

CSS 复制代码 [('1', ['a']), ('2', ['b']), ('3', ['c', 'd']), ('4', ['e' , 'f']), ('5', ['g'])] 以下是代码的作用:

它初始化一个空字典temp_dict来存储从数字到字母的映射。 它迭代原始的元组列表。对于每个元组,它检查该数字是否已在字典中。如果不是,它会创建一个新条目,其中包含包含该字母的列表。如果该数字已在字典中,则会将该字母附加到现有列表中。 处理完所有元组后,它使用 temp_dict.items() 将字典转换回元组列表。

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