Добавление двух списков в словарь и возможность слияния значений с одинаковыми заголовками - PullRequest
0 голосов
/ 26 сентября 2018

Я только что импортировал несколько столбцов в два списка в Python.Я пытаюсь добавить оба списка вместе в словарь и иметь уникальные объекты с итоговыми значениями.Например, «Apple» и «Apple» вернут «Apple»: 14,0, поскольку оба они объединены.Как мне получить желаемый результат?Нужно ли что-нибудь добавить в мой цикл for?

listA = ['Apple', 'Apple', 'Banana', 'Orange', 'Pineapple', 'Pineapple']
listB = ['5.0', '9.0', '12.0', '2.0', '8.0', '1.0']
dict={}

for i, x in zip((listA),(listB)):
    dict[i]=x

Вывод:

{'Apple':'9.0', 'Banana':'12.0', 'Orange':'2.0', 'Pineapple':'1.0'}

Желаемый вывод:

{'Apple':'14.0', 'Banana':'12.0', 'Orange':'2.0', 'Pineapple':'9.0'}

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Вы можете использовать collections.defaultdict(), чтобы ваши значения автоматически добавлялись при обнаружении того же ключа, например:

import collections

listA = ['Apple', 'Apple', 'Banana', 'Orange', 'Pineapple', 'Pineapple']
listB = ['5.0', '9.0', '12.0', '2.0', '8.0', '1.0']

result = collections.defaultdict(float)
for k, v in zip(listA, listB):
    result[k] += float(v)

Это, однако, приведет к результату с плавающей точкой, т.е.:

{'Apple': 14.0, 'Banana': 12.0, 'Orange': 2.0, 'Pineapple': 9.0}

Если вам нужны строковые результаты, вы можете либо обработать результат:

result = {k: str(v) for k, v in result.iteritems()}  # Python 3.x: result.items()
# {'Apple': '14.0', 'Banana': '12.0', 'Orange': '2.0', 'Pineapple': '9.0'}

Или вы можете обработать все без collections.defaultdict():

listA = ['Apple', 'Apple', 'Banana', 'Orange', 'Pineapple', 'Pineapple']
listB = ['5.0', '9.0', '12.0', '2.0', '8.0', '1.0']

result = {}
for k, v in zip(listA, listB):
    result[k] = str(float(result.get(k, 0)) + float(v))
# {'Apple': '14.0', 'Banana': '12.0', 'Orange': '2.0', 'Pineapple': '9.0'}
0 голосов
/ 26 сентября 2018

просто используйте по умолчанию dict

In [1]: from collections import defaultdict

In [2]: listA = ['Apple', 'Apple', 'Banana', 'Orange', 'Pineapple', 'Pineapple']
   ...: listB = ['5.0', '9.0', '12.0', '2.0', '8.0', '1.0']
   ...: 
   ...: 

In [3]: d = defaultdict(float)

In [4]: for i, x in zip((listA),(listB)):
   ...:     d[i] += float(x)
   ...:     

In [5]: d
Out[5]: 
defaultdict(float,
            {'Apple': 14.0, 'Banana': 12.0, 'Orange': 2.0, 'Pineapple': 9.0})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...