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
在我看来是最可爱的!很完美!谢谢