Python 删除/合并此列表中重复项的最佳方法?

Python 删除/合并此列表中重复项的最佳方法?,python,list,merge,Python,List,Merge,我得到了一个列表,它是这样建立的: item_list = [ [ObjectB, 9], [ObjectA, 2], [ObjectB, 5], [ObjectC, 8], [ObjectA, 7] ] item_list = [ [ObjectB, 14], [ObjectA, 9], [ObjectC, 8], ] 正如您所看到的,ObjectA和ObjectB在这个列表中有两次出现。左栏定义了它是哪种类型的项目,右栏定义

我得到了一个列表,它是这样建立的:

item_list = [
    [ObjectB, 9],
    [ObjectA, 2],
    [ObjectB, 5],
    [ObjectC, 8],
    [ObjectA, 7]
]
item_list = [
    [ObjectB, 14],
    [ObjectA, 9],
    [ObjectC, 8],
]
正如您所看到的,ObjectA和ObjectB在这个列表中有两次出现。左栏定义了它是哪种类型的项目,右栏定义了我需要它的频率。因此,我希望得到如下结果:

item_list = [
    [ObjectB, 9],
    [ObjectA, 2],
    [ObjectB, 5],
    [ObjectC, 8],
    [ObjectA, 7]
]
item_list = [
    [ObjectB, 14],
    [ObjectA, 9],
    [ObjectC, 8],
]
[ObjectB,9]
[ObjectB,5]
合并为
[ObjectB,14]
ObjectA
事件也是如此。
实现这一目标的最佳方式是什么?我尝试了几种解决方案,但我觉得有一种非常简单有效的解决方案。

显然,一本字典可以解决您的问题:

d = defaultdict(int)
for k, v in item_list:  # unwrapping credits to @clemtoy
    d[k] += v
result = [[k, v] for k, v in d.iteritems()]
因此,您首先要做的是创建一个
defaultdict
,使用
int
作为工厂方法。这意味着,如果您试图访问字典中不存在的任何键,您将获得
0

接下来,通过增加键的值,开始填充字典。如果该键还不在字典中,您将从
0
开始

现在,最后要转换回您想要的结构,您需要理解最后一行列表。您的
结果将是:

[[ObjectA, 9], [ObjectB, 14], [ObjectC, 8]]
此外,如果您需要对其进行分类,请继续:

result = sorted(result, key=itemgetter(1), reverse=True)))
这将使用每个元素的第二个子元素按降序对
结果进行排序。

像这样吗

ObjectA = "hello"
ObjectB = "cruel"
ObjectC = "world"

item_list = [
    [ObjectB, 9],
    [ObjectA, 2],
    [ObjectB, 5],
    [ObjectC, 8],
    [ObjectA, 7]
]

sum = {}
for item in item_list:
    sum[item[0]] = sum.get(item[0], 0) + item[1]
print(sum)
{‘世界’:8,‘残忍’:14,‘你好’:9}


试着把它转换成字典!但是
对于k,在item_列表中的v:d[k]+=v
在我看来是最可爱的!很完美!谢谢