繁体   English   中英

Python将部分相同的数组合并

[英]Python combine partially the same Array

我有一个2D数组,想合并部分相似的项目。

[
[Red,Blue,Yellow,5]
[Red,Blue,Yellow,10]
[Red,Blue,Green,5]
[Red,Blue,Green,5]
[Red,Blue,Orange,5]
[Red,Blue,Violet,5]
]

我希望它变成这样,修剪并创建一个唯一的数组

[
[Red,Blue,Yellow,15]
[Red,Blue,Green,10]
[Red,Blue,Orange,5]
[Red,Blue,Violet,5]
]

Edit1:这就是我所做的。 我只是基础知识,希望有一个更好的版本。

newTaskList = []
totalTaskList = []
totalValueList = []
finalTaskList = []

for taskIndex, taskList in enumerate(readTaskList):
    newTaskList = []
    newTaskList.append(taskList[0])
    newTaskList.append(taskList[1])
    newTaskList.append(taskList[2])
    newTaskList.append(taskList[4])


    if(newTaskList not in totalTaskList):
        totalTaskList.append(newTaskList)
        totalValueList.append(float(taskList[3]))

    else:
        for itemIndex, itemList in enumerate(totalTaskList):
            if(itemList[0] == taskList[0] and itemList[1] == taskList[1] and itemList[2] == taskList[2] and itemList[3] == taskList[4]):
                totalValueList[itemIndex] += float(taskList[3])

for taskIndex, task in enumerate(totalTaskList):
    for workType in workTypeList:
        newWorkTypeItem = task[2].replace(" ","_").split("_")
        if len(newWorkTypeItem) > 1:
            task[2] = newWorkTypeItem[0] + " " + newWorkTypeItem[1]

        if(task[1] == workType[0] and task[2] == workType[1]):
            task[2] = workType[2]
            break            
    task.append(totalValueList[taskIndex])
    finalTaskList.append(task)

您可以使用defaultdict

result = defaultdict(int)
for col1, col2, col3, value in my_list:
   result[(col1, col2, col3)] += value
result = [list(key) + [value] for key,value in result.items()]
print(result)

输出量

[['Red', 'Blue', 'Yellow', 15], ['Red', 'Blue', 'Green', 10], ['Red', 'Blue', 'Orange', 5], ['Red', 'Blue', 'Violet', 5]]

使用集合模块。

例如:

from collections import defaultdict
l = [
['Red','Blue','Yellow',5],
['Red','Blue','Yellow',10],
['Red','Blue','Green',5],
['Red','Blue','Green',5],
['Red','Blue','Orange',5],
['Red','Blue','Violet',5],
]

d = defaultdict(int)
for i in l:
    d[tuple(i[:3])] += i[-1]
print [list(k) + [v] for k,v in d.items()]

输出:

[['Red', 'Blue', 'Orange', 5], ['Red', 'Blue', 'Yellow', 15], ['Red', 'Blue', 'Violet', 5], ['Red', 'Blue', 'Green', 10]]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM