Сравнить элементы списка списка python - PullRequest
0 голосов
/ 27 июня 2018

У меня есть список списка, и мне нужно сравнить элемент 0 и элемент 2 всех элементов. Если эти элементы равны, я хочу суммировать пункт 1 и пункт 3. Для большей ясности:

list1 = [['diez.hn','Arts','Austria','8'], ['diez.hn','Entertainment','Austria','12']]
element 0 of list1: ['diez.hn','Arts','Austria','8']
element 1 of list1: ['diez.hn','Entertainment','Austria','12']

что мне нужно:

list_ok = [['diez.hn','Arts - Entertainment','Austria','20']]

Я пробовал что-то вроде этого:

reader = [['diez.hn','Arts','Austria','8'], ['diez.hn','Entertainment','Austria','12']]
reader2 = [['diez.hn','Arts','Austria','8'], ['diez.hn','Entertainment','Austria','12']]
    for item in reader:
        for item2 in reader2:
            if item[0] and item[2] == item2[0] and item2[2]:
                item[1] = item[1] + item2[1]
                item[3] = item[3] + item2[3]

1 Ответ

0 голосов
/ 27 июня 2018

Этот подход сортирует список, а затем использует itertools.groupby() для группировки подсписков, имеющих одинаковый элемент в позициях 0 и 2:

import itertools
import operator

list1.sort(key=operator.itemgetter(0, 2))

list_ok = []

for k, group in itertools.groupby(list1, key=operator.itemgetter(0, 2)):
    group = list(group)
    list_ok.append([
        k[0], 
        ' - '.join(item[1] for item in group), 
        k[1], 
        str(sum(int(item[3]) for item in group)), 
    ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...