Глупый ответ, но если вы не можете понять, почему его не перенаправлять, проверьте, что для веб-папки включено следующее.
AllowOverride All
Это позволит вам для запуска htaccess, который должен быть запущен! (есть альтернативы, но не на вызове проблемы https://httpd.apache.org/docs/2.4/mod/core.html#allowoverride )
Вы можете создать словарь, а затем перебрать значения в каждом списке и либо добавить к текущему значению для каждого ключа в словаре, либо установить значение, равное текущему значению, если в настоящее время значения не существует. После этого вы можете вернуться к списку.
Например:
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)]
Так как вы пометили 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)]
Я думаю, что следующий код работает
dict_x1=dict(x1)
for item in x2:
if item[0] in dictx1:
dictx1[item[0]] += item[1]
else:
dictx1[item[0] = item[1]
Используйте 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))
. В основном он предоставляет отсортированный, объединенный список кортежей, готовых для передачи групповым пользователям.