如何将列表元素连接到特定的其他元素

时间:2018-06-13 15:17:04

标签: python list

大家好,这是我的第一篇帖子:)

我有一个小脚本,它创建了一个包含某些数据的列表:输出是一个列表,打印如下:

2018-06-07,thingA,100173 
2018-06-07,thingB,35277
2018-06-08,thingA,87599
2018-06-08,thingB,35311 
2018-06-09,thingA,94371 
2018-06-09,thingB,45330 
2018-06-10,thingA,104483 
2018-06-10,thingB,51726

我正在尝试将其转换为这样的观点:

2018-06-07,100173,35277
2018-06-08,87599,35311
2018-06-09,94371,45330
2018-06-10,104483,51726

所以我想将具有相同日期的行连接到第二行的thingA和第三行的thingB。它看起来很容易,但我不知道如何咬它。

我的代码计算事物A和B的出现取决于日期:

  

[...'2018-06-09,thingA','2018-06-09,thingB'...]

yyyy = [[x,lista.count(x)] for x in set(lista)]
yyyy.sort()
for x in yyyy:
        x  = x[0] + "," + str(x[1])

亲切的问候, 的Pawel

3 个答案:

答案 0 :(得分:1)

对于O(n)解决方案,您可以在列表collections.defaultdict列表中使用L

from collections import defaultdict

d = defaultdict(list)

for date, thing, num in L:
    d[date].append(num)

res = [[date, *nums] for date, nums in d.items()]

<强>结果:

print(res)

[['2018-06-07', 100173, 35277],
 ['2018-06-08', 87599, 35311],
 ['2018-06-09', 94371, 45330],
 ['2018-06-10', 104483, 51726]]

答案 1 :(得分:0)

您可以使用itertools.groupby

import itertools
data = [['2018-06-07', 'thingA', '100173 '], ['2018-06-07', 'thingB', '35277'], ['2018-06-08', 'thingA', '87599'], ['2018-06-08', 'thingB', '35311 '], ['2018-06-09', 'thingA', '94371 '], ['2018-06-09', 'thingB', '45330 '], ['2018-06-10', 'thingA', '104483 '], ['2018-06-10', 'thingB', '51726']]
new_data = [[a, *[i[-1] for i in b]] for a, b in itertools.groupby(sorted(data, key=lambda x:x[0]), key=lambda x:x[0])]
print('\n'.join(','.join(i) for i in new_data))

输出:

2018-06-07,100173,35277
2018-06-08,87599,35311 
2018-06-09,94371,45330 
2018-06-10,104483,51726

答案 2 :(得分:0)

非常感谢Ajax1234。

我需要做一些更改来准备正确的数据,最后我使用了你的帮助:

{{1}}

谢谢!