【问题标题】:merge nested list by first value in each list in python在python中的每个列表中按第一个值合并嵌套列表
【发布时间】:2020-05-17 14:55:27
【问题描述】:

我有这个代码的一个版本,但它似乎过于复杂。这是我卡住的简化版本。在python3中。

list1 = [['a', 'b'], ['a', 'c'], ['a', 't'], ['x', 'f'], ['x', 'g'], ['d', 'z']]

z = len(list1)
for i in range(0, z):
    for j in range(i + 1, z):
        while list1[i][0] == list1[j][0]:
            list1[i] = list1[i] + [list1[j][-1]]
            if list1[j] in list1:
                list1.remove(list1[j])
                z = z - 1

我想要输出。

[['a', 'b', 'c', 't'], ['x', 'f', 'g'], ['d', 'z']]

【问题讨论】:

  • 你能解释一下逻辑吗
  • 合并第一个值相同的列表而不复制第一个值。我只对一个易于阅读的代码感兴趣。如果有更好的方法那就更好了。

标签: python list nested


【解决方案1】:

稍微修改一下 Darryl:

d = {}
for head, *tail in lst:
    d.setdefault(head, [head]).extend(tail)

lst2 = list(d.values())

【讨论】:

    【解决方案2】:

    一个简化的结构是以下两个步骤。

    d = {}
    for sublist in lst:
      d.setdefault(sublist[0], []).extend(sublist[1:])
    
    lst2 = [[k] + v for k, v in d.items()]
    
    print(lst2)
    >>> [['a', 'b', 'c', 't'], ['x', 'f', 'g'], ['d', 'z']]
    

    说明

    (1) 字典 d 将具有相同第一个元素的项作为字典键放置,其值对应于要生成的剩余元素:

    {'a': ['b', 'c', 't'], 'x': ['f', 'g'], 'd': ['z']}
    

    (2) 接下来,列表推导式使用每个字典条目的键作为子列表的第一个元素,并将项目的值作为剩余元素来产生所需的结果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-31
      • 2018-06-16
      • 1970-01-01
      • 2023-03-26
      • 2014-11-06
      • 1970-01-01
      • 2016-02-11
      • 2022-11-21
      相关资源
      最近更新 更多