Python将部分相同的数组组合在一起
我有一个2D数组,希望合并部分相似的项目Python将部分相同的数组组合在一起,python,Python,我有一个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]
[
[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]]
您可以使用
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]]
使用集合模块 Ex:
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]]
输出:
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]]
使用集合模块 Ex:
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]]
输出:
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]]
显示您已尝试的内容请检查。提示:这可能可以使用itertools模块在一行代码中完成(导入除外)。我将创建一个
defaultdict
,使用一个颜色元组作为键,然后进行迭代,将具有相同键的所有值添加到一起。显示您已尝试的内容请检查。提示:这可能可以使用itertools模块在一行代码中完成(导入除外)。我会创建一个defaultdict
,使用一个颜色元组作为键,然后迭代,将所有具有相同键的值添加到一起。我知道在python中有一种很棒的方法,现在就是这样!非常感谢。值得一提的是,结果不会以与原始列表相同的顺序出现,但是如果这不是您的问题,那么您就可以了。我知道在python中有一种很棒的方法,就是这样!非常感谢。值得一提的是,结果不会以与原始列表相同的顺序出现,但如果这不是您的问题,您就可以了。