如何在Python中添加列表列表的特定元素?

时间:2018-05-06 22:30:00

标签: python python-3.x list dictionary

所以如果第一个和第二个值相等,我想在列表列表中添加元素的第三个值。如果没有,我希望将不相等的那些添加到我的总和列表中。

first=[[1,1,5],[2,3,7],[3,5,2],[4,4,6]]
second=[[1,1,3],[4,2,4],[2,3,2]]
sum=[]

for i in ((first)):
    for j in ((second)):
        if i[0]==j[0] and i[1]==j[1]:
            sum.append([i[0],j[1],i[2]+j[2]])


print(sum)

所以这给了我[[1, 1, 8], [2, 3, 9]],但我也希望在我的[3,5,2],[4,4,6],[4,2,4]列表中sum。我怎么在pyhton中做到这一点?

2 个答案:

答案 0 :(得分:1)

一种解决方案是使用标准库中的collections.defaultdict

我们的想法是将您的字典键设置为前2个元素的元组,然后按第三个元素递增。然后通过字典理解来聚合键和值。

first = [[1,1,5],[2,3,7],[3,5,2],[4,4,6]]
second = [[1,1,3],[4,2,4],[2,3,2]]

from collections import defaultdict
from itertools import chain

d = defaultdict(int)

for i, j, k in chain(first, second):
    d[(i, j)] += k

res = [[*k, v] for k, v in d.items()]

print(res)

[[1, 1, 8], [2, 3, 9], [3, 5, 2], [4, 4, 6], [4, 2, 4]]

以下是不使用任何库的等效解决方案,使用dict.setdefault

d = {}
for i, j, k in first+second:
    d.setdefault((i, j), 0)
    d[(i, j)] += k

res = [[*k, v] for k, v in d.items()]

答案 1 :(得分:0)

我试图在没有字典或库的情况下这样做:

first = [[1,1,5],[2,3,7],[3,5,2],[4,4,6]]
second = [[1,1,3],[4,2,4],[2,3,2]]
checked = []
sum = []

for n_i, i in enumerate(first):
    for n_j, j in enumerate(second):
        if i[0]==j[0] and i[1]==j[1]:
            sum.append([i[0],j[1],i[2]+j[2]])
            checked.append([n_i,n_j]) # Save the used index

# Delete used index
[first.pop(i[0]) and second.pop(i[1]) for i in reversed(checked)]

# Append non-used index
[sum.append(first.pop(0)) for x in range(0,len(first))]
[sum.append(second.pop(0)) for x in range(0,len(second))]

print(sum)

返回:

[[1, 1, 8], [2, 3, 9], [3, 5, 2], [4, 4, 6], [4, 2, 4]]