два списка в словарь - PullRequest
       6

два списка в словарь

4 голосов
/ 27 ноября 2011

У меня есть два списка, созданных в python, вот так:

list1 = [2, 3, 3, 4, 4, 5]
list2 = [-4, 8, -4, 8, -1, 2]

Теперь я сжал эти два списка в словарь примерно так:

d = dict(zip(list1, list2))

, что дает мне:

{2: -4, 3: -4, 4: -1, 5: 2}

Я хочу получить такой результат:

{2: -4, 3: 4, 4: 7, 5: 2}

list1 становится ключом к новому словарю.Если в списке list1 есть два одинаковых значения, я хочу добавить два значения.Например, в списках 2, 8 и -4 оба имеют один и тот же ключ 3. Есть ли способ сложить эти два значения вместе, чтобы ключ выглядел как

{3: 4}   

Ответы [ 4 ]

10 голосов
/ 27 ноября 2011

Я думаю, вы хотите что-то вроде этого:

>>> list1 = [2, 3, 3, 4, 4, 5]
>>> list2 = [-4, 8, -4, 8, -1, 2]

>>> d = {}
>>> for k, v in zip(list1, list2):
        d[k] = d.get(k, 0) + v

>>> d
{2: -4, 3: 4, 4: 7, 5: 2}
7 голосов
/ 27 ноября 2011

Попробуйте использовать defaultdict:

from collections import defaultdict

d = defaultdict(int)
for k, v in zip(list1, list2):
    d[k] += v

Результат:

defaultdict(<type 'int'>, {2: -4, 3: 4, 4: 7, 5: 2})

Посмотрите, как он работает в режиме онлайн: ideone

0 голосов
/ 21 ноября 2018

Вы можете попробовать составить словарь, чтобы объединить два списка в словарь.

list1 = [2, 3, 3, 4, 4, 5]
list2 = [-4, 8, -4, 8, -1, 2]

{k:v for k,v in zip(list1,list2)}

Выход:

{2: -4, 3: -4, 4: -1, 5: 2}
0 голосов
/ 27 ноября 2011

Просто помните, когда вы сортируете, вы несете большие расходы (O (nlogn)). Также весьма вероятно использование O (n) временного пространства (памяти). DICT предназначены для того, чтобы лучше всего выполнять одну работу - это быстрый поиск / добавление / удаление - не обходить все элементы в отсортированном порядке (ходить в несортированном порядке все еще хорошо). Для небольшого количества предметов это не проблема. Хорошо определить правильную структуру данных, зная ее сильные и слабые стороны. Существуют и другие структуры данных, такие как деревья, которые могут обеспечить упорядоченную прогулку без больших затрат (они могут сделать это за O (n)).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...