使用多项目python合并元组

使用多项目python合并元组,python,python-3.x,list,merge,concatenation,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'), ('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())
但我只能合并项目,如果我有两个项目每行


我已尝试修改逻辑,但未成功。

您的代码存在多个问题:

  • 您希望按国家和货币分组。然而,你的字典只使用了国家密钥
  • 您的元组理解将只返回一个元组,而您需要一个元组列表作为输出
  • 您正在跟踪内置的
    列表
    类,不应该这样做
  • 您可以改为使用带有元组键的
    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')]
    

    在我看来,您希望遍历列表,并将每个元组的第三个元素(即货币)组合起来,其中包含相同的第二个和第一个元素

    我将这样做:

    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']
    

    虽然结果不是列表中的元组,但它仍然对数据进行排序,希望这有帮助

    请解释要合并哪些元组、基于什么基础以及如何合并。您的示例不清楚。元组中的前两项总是相同的,而第三项总是变化的吗?请不要覆盖
    列表
    。元组中的前两项始终是StackOverflow的相同对象。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南,在这里应用。为什么要将元组转换为列表并返回元组<代码>[k+tuple(v)代表k,d.items中的v()]@tobias_k,谢谢,这是一个公平的观点,我忘了你可以添加元组(当然,效率很低)。