Как объединить список кортежей

Глупый ответ, но если вы не можете понять, почему его не перенаправлять, проверьте, что для веб-папки включено следующее.

AllowOverride All

Это позволит вам для запуска htaccess, который должен быть запущен! (есть альтернативы, но не на вызове проблемы https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride )

-2
задан Wen-Ben 17 January 2019 в 14:57
поделиться

4 ответа

Вы можете создать словарь, а затем перебрать значения в каждом списке и либо добавить к текущему значению для каждого ключа в словаре, либо установить значение, равное текущему значению, если в настоящее время значения не существует. После этого вы можете вернуться к списку.

Например:

full_dict = {}
for x in [x1, x2]:
    for key, value in x:
        full_dict[key] = full_dict.get(key, 0) + value # add to the current value, if none found then use 0 as current value

x3 = list(full_dict.items())

Результат для x3:

[('A', 3), ('B', 8), ('C', 10), ('D', 6)]
0
ответ дан Henry Woody 17 January 2019 в 14:57
поделиться

Так как вы пометили pandas

df1,df2=pd.DataFrame(x1),pd.DataFrame(x2)
pd.concat([df1,df2]).groupby(0,as_index=False).sum().apply(tuple,1).tolist()
[('A', 3), ('B', 8), ('C', 10), ('D', 6)]
0
ответ дан Tomothy32 17 January 2019 в 14:57
поделиться

Я думаю, что следующий код работает

dict_x1=dict(x1)
for item in x2:
  if item[0] in dictx1:
    dictx1[item[0]] += item[1]
  else:
    dictx1[item[0] = item[1]
0
ответ дан palebluedot 17 January 2019 в 14:57
поделиться

Используйте collections.Counter

>>> x1 = [('A', 3), ('B', 4), ('C', 5)]
>>> x2 = [('B', 4), ('C', 5), ('D', 6)]
>>> from collections import Counter
>>> c1 = Counter(dict(x1))
>>> c2 = Counter(dict(x2))
>>> c3 = c1 + c2   
>>> c3.items()
dict_items([('A', 3), ('B', 8), ('C', 10), ('D', 6)])

Просто создайте Counter для каждого списка, вы можете сделать это, превратив список кортежей в промежуточный диктант. Затем просто добавьте счетчики.

Чтобы вернуть список, просто вызовите метод items счетчика. Технически то, что возвращается, является dict_items объектом, если действительно важно, что это list, тогда просто вызовите список на c3.items(), т.е. list(c3.items()).

Альтернативный вкладыш 1 с использованием groupby и heapq.merge.

from heapq import merge
from itertools import groupby
from operator import itemgetter

x1 = [('A', 3), ('B', 4), ('C', 5)]
x2 = [('B', 4), ('C', 5), ('D', 6)]

result = [(a, sum(t[1] for t in b)) for a, b in groupby(merge(x1, x2), key=itemgetter(0))]
print(result)

heapq.merge примерно эквивалентно sorted(itertools.chain(*iterables)). В основном он предоставляет отсортированный, объединенный список кортежей, готовых для передачи групповым пользователям.

0
ответ дан Paul Rooney 17 January 2019 в 14:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: