【问题标题】:comparing tuples in a list比较列表中的元组
【发布时间】:2018-10-01 09:04:25
【问题描述】:

所以我有一个元组列表,例如:

[('CX8888', '2017-01-01T00:10:59'), ('RJ5874', '2017-01-01T00:11:39'), ('RJ5874', '2017-01-01T00:12:08')]

如果一个元组的第一个索引与另一个相同,它将创建一个新列表,如下所示:

[('CX8888', '2017-01-01T00:10:59'), ('RJ5874', ['2017-01-01T00:11:39', '2017-01-01T00:12:08'])]

【问题讨论】:

  • 这类似于您之前删除的问题。您能否先向我们展示您尝试解决的问题?这会将反对票变成赞成票。这不是免费的代码服务。
  • 最简单的方法就是迭代它们。我不是 Python 程序员,但在 PHP 中我会使用 array_reduce
  • 你真的想要一份清单吗?它的设置方式更适合字典

标签: python python-3.x tuples


【解决方案1】:

使用字典而不是列表,然后将字典转换为所需的格式:

l = [('CX8888', '2017-01-01T00:10:59'), ('RJ5874', '2017-01-01T00:11:39'), ('RJ5874', '2017-01-01T00:12:08')]
d = {}
for tup in l:
    if tup[0] in d:
        d[tup[0]].append(tup[1])
    else:
        d[tup[0]] = [tup[1]]

list(zip(d.keys(),d.values()))
[('CX8888', ['2017-01-01T00:10:59']),
 ('RJ5874', ['2017-01-01T00:11:39', '2017-01-01T00:12:08'])]

【讨论】:

    【解决方案2】:

    一种简单的方法是使用collections.defaultdict,然后转换回列表:

    from collections import defaultdict
    
    lst = [('CX8888', '2017-01-01T00:10:59'), 
           ('RJ5874', '2017-01-01T00:11:39'), ('RJ5874', '2017-01-01T00:12:08')]
    
    d = defaultdict(list)
    for key, value in lst:
           d[key].append(value)
    d2 = list(d.items())
    

    但考虑到这种数据结构,您最好使用字典 d 而不是列表 d2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 2021-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多