我有两个列表,一个是列表列表,它们具有相同数量的索引(值的一半),如下所示:
list1=[['47', '43'], ['299', '295'], ['47', '43'], etc.]
list2=[[9.649, 9.612, 9.42, etc.]
我想检测同一列表中的重复值对(并删除它),并在第二个列表中对具有相同索引的值求和,创建如下输出:
list1=[['47', '43'], ['299', '295'], etc.]
list2=[[19.069, 9.612, etc.]
主要问题是值的顺序很重要,而且我真的卡住了。
答案 0 :(得分:0)
您可以创建一个collections.defaultdict
来将值汇总在一起,将键作为子列表(转换为tuple
可以清除)
list1=[['47', '43'], ['299', '295'], ['47', '43']]
list2=[9.649, 9.612, 9.42]
import collections
c = collections.defaultdict(float)
for l,v in zip(list1,list2):
c[tuple(l)] += v
print(c)
替代方案使用collections.Counter
并执行相同的操作:
c = collections.Counter((tuple(k),v) for k,v in zip(list1,list2))
此时,我们有相关数据:
defaultdict(<class 'float'>, {('299', '295'): 9.612, ('47', '43'): 19.069})
现在如果需要(不确定,因为字典很好地保存了数据)我们可以重建列表,保持它们之间的(相对)顺序(但不是它们的原始顺序,这不应该是一个问题,因为他们仍然联系在一起):
list1=[]
list2=[]
for k,v in c.items():
list1.append(list(k))
list2.append(v)
print(list1,list2)
结果:
[['299', '295'], ['47', '43']]
[9.612, 19.069]