我需要我的脚本来将元组与多个项目合并。我有:
list = [('France', 'Euro', 'Paris'), ('France', 'Euro', 'Marseille'),
('Allemagne', 'Euro', 'Berlin'),
('Allemagne', 'Euro', 'Hambourg'), ('Allemagne', 'Euro', 'Munich'),
('France', 'Euro', 'Lyon'), ('Turquie', 'Livre', 'Ankara')]
我想要:
list = [('France', 'Euro', 'Paris', 'Marseille', 'Lyon'),
('Allemagne', 'Euro', 'Berlin', 'Hambourg', 'Munich'),
('Turquie', 'Livre', 'Ankara')]
我发现了:
for t in j:
d.setdefault(t[0], set()).add(t[1])
result = tuple(tuple([k]+list(v)) for k, v in d.items())
但是我只能合并每行有2个项目的项目。
我试图修改逻辑,但是没有成功。
答案 0 :(得分:1)
您的代码有多个问题:
list
类,永远不要这样做。您可以改为使用collections.defaultdict
和元组键,然后使用列表推导:
from collections import defaultdict
d = defaultdict(list)
for ctry, ccy, city in L:
d[(ctry, ccy)].append(city)
res = [k+tuple(v) for k, v in d.items()]
print(res)
[('France', 'Euro', 'Paris', 'Marseille', 'Lyon'),
('Allemagne', 'Euro', 'Berlin', 'Hambourg', 'Munich'),
('Turquie', 'Livre', 'Ankara')]
答案 1 :(得分:0)
在我看来,您想遍历列表,并合并每个元组的 third 元素(作为货币),这些元组包含相同的 second 和< em> first 元素
这就是我要继续的方式:
currencies = {}
for i in lists:
if (i[0],i[1]) in currencies.keys():
currencies[(i[0],i[1])] = currencies[(i[0],i[1])]|set([i[2]])
else:
currencies[(i[0],i[1])] = set([i[2]])
lists = []
for c in currencies:
lists.append(list(c) + list(currencies[c]))
print(lists)
这将产生:
[['France', 'Euro', 'Marseille', 'Lyon', 'Paris'], ['Allemagne', 'Euro', 'Berlin', 'Munich', 'Hambourg'], ['Turquie', 'Livre', 'Ankara']]
尽管结果不是列表中的元组,但它仍对数据进行排序,希望对您有所帮助!