Vin*_*M S 5 python list duplicates
我有一个列表,我需要从中删除重复值并汇总相应的列值.清单是:
lst = [['20150815171000', '1', '2'],
['20150815171000', '2', '3'],
['20150815172000', '3', '4'],
['20150815172000', '4', '5'],
['20150815172000', '5', '6'],
['20150815173000', '6', '7']]
Run Code Online (Sandbox Code Playgroud)
现在我需要遍历列表并获得如下输出:
lst2 = [['20150815171000', '3', '5'],
['20150815172000', '12', '15'],
['20150815173000', '6', '7']]
Run Code Online (Sandbox Code Playgroud)
怎么可以这样做?我尝试编写如下所示的代码,但它只是比较连续的值而不是所有匹配的值.
lst2 = []
ws = wr = power = 0
for i in range(len(lst)):
if lst[i][0] == lst[i+1][0]:
time = lst[i][0]
ws = (float(lst[i][1])+float(lst[i+1][1]))
wr = (float(lst[i][2])+float(lst[i+1][2]))
else:
time = lst[i][0]
ws = lst[i][1]
wr = lst[i][2]
lst2.append([time, ws, wr, power])
Run Code Online (Sandbox Code Playgroud)
任何人都可以让我知道我该怎么做?
我会使用itertools.groupby
,基于内部列表中的第一个元素进行分组.
所以我首先根据第一个元素对列表进行排序,然后基于它对组进行排序(如果列表已经在该元素上排序,那么您不需要再次排序,可以直接分组).
示例 -
new_lst = []
for k,g in itertools.groupby(sorted(lst,key=lambda x:x[0]) , lambda x:x[0]):
l = list(g)
new_lst.append([k,str(sum([int(x[1]) for x in l])), str(sum([int(x[2]) for x in l]))])
Run Code Online (Sandbox Code Playgroud)
演示 -
>>> import itertools
>>>
>>> lst = [['20150815171000', '1', '2'],
... ['20150815171000', '2', '3'],
... ['20150815172000', '3', '4'],
... ['20150815172000', '4', '5'],
... ['20150815172000', '5', '6'],
... ['20150815173000', '6', '7']]
>>>
>>> new_lst = []
>>> for k,g in itertools.groupby(sorted(lst,key=lambda x:x[0]) , lambda x:x[0]):
... l = list(g)
... new_lst.append([k,str(sum([int(x[1]) for x in l])), str(sum([int(x[2]) for x in l]))])
...
>>> new_lst
[['20150815171000', '3', '5'], ['20150815172000', '12', '15'], ['20150815173000', '6', '7']]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
815 次 |
最近记录: |