我在处理其中的元组列表时遇到问题。
如果我有一个像这样的元组列表:
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'])]
采取什么方法?
创建一个分组字典,其中键是元组中的第一个值,值是列表。然后你可以将这个字典转换为最终列表:
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'])]
您可以使用字典临时存储从数字到字母的映射来实现所需的格式,然后将该字典转换回元组列表。具体方法如下:
蟒蛇 复制代码 原始列表 = [('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() 将字典转换回元组列表。