将元组与多个项目python合并

时间:2018-08-15 16:24:15

标签: python python-3.x list merge concatenation

我需要我的脚本来将元组与多个项目合并。我有:

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个项目的项目。

我试图修改逻辑,但是没有成功。

2 个答案:

答案 0 :(得分:1)

您的代码有多个问题:

  1. 您要按国家和货币分组。但是您的字典仅使用国家/地区键。
  2. 您想要元组列表作为输出时,您对元组的理解只会返回一个元组。
  3. 您正在隐藏内置的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']] 尽管结果不是列表中的元组,但它仍对数据进行排序,希望对您有所帮助!