Как умножить или добавить значения словаря, если значение словаря является списком - PullRequest
0 голосов
/ 31 января 2020
import csv

ratings_file = open("ratings.txt","r")
book_file = open("booklist.txt","r")
ratinglist = open("ratings.txt").readlines()
booklist = open("booklist.txt").readlines()
keys = [key.strip('\n') for key in ratinglist[0::2]]
values = [value.strip(' \n').split(' ') for value in ratinglist[1::2]]
my_dict = dict(zip(keys, values))
print(my_dict)

Мой словарь:

{'Nathan': ['0', '0', '0', '0', '0', '0', '0', '-5', '0', '5', '1', '0', '0', 
            '0', '1', '0', '5', '0', '-3', '0', '3', '0', '0', '0', '0', '0', 
            '0', '-5', '0', '0', '-3', '5', '0', '5', '0', '3', '0', '0', '1', 
            '0', '3', '1', '3', '5', '0', '0', '0', '0', '0', '1', '-5', '0', 
            '0', '0', '0']}

У меня есть этот словарь, ключ которого является именем, а затем значение является списком значений.

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

Например, мне было интересно, смогу ли я сделать это:

'Nathan' : ['241']

вместо того, чтобы все значения были разными целыми числами

Я знаю, как добавить все значения вместе для списка или словаря, но я не понимаю, как это сделать для словаря с список значений.

Спасибо

Ответы [ 4 ]

0 голосов
/ 31 января 2020

Дано

d = {'Nathan': ['0', '0', '0', '0', '0', '0', '0', '-5', '0', '5', '1', '0', '0', 
        '0', '1', '0', '5', '0', '-3', '0', '3', '0', '0', '0', '0', '0', 
        '0', '-5', '0', '0', '-3', '5', '0', '5', '0', '3', '0', '0', '1', 
        '0', '3', '1', '3', '5', '0', '0', '0', '0', '0', '1', '-5', '0', 
        '0', '0', '0']}

Do

d2 = {k: str(sum(map(int, v))) for k, v in d.items()}

Если вы хотите умножить все элементы в списке, сделайте

from operator import mul
from functools import reduce

a = [2, 5, 7, 9]
answer = reduce(mul, a)  # 2 * 5 * 7 * 9 = 630
0 голосов
/ 31 января 2020

Перед суммированием вам придется преобразовать все строки в целые числа.

new_dict = {
    k: [str(sum(map(int, v)))] for k, v in my_dict.items()
}

Для умножения вы можете использовать функцию reduce:

from functools import reduce

new_dict = {
    k: [str(reduce(lambda x, y: x*y, 
                   map(int, v) ))] 
    for k, v in my_dict.items()
}
0 голосов
/ 31 января 2020

Сначала вы должны преобразовать эти строки в int, поэтому:

my_dict['Nathan'] = [int(element) for element in my_dict['Nathan']]

, а затем сложите их, чтобы получить окончательный результат:

my_dict['Nathan'] = sum(my_dict['Nathan'])
0 голосов
/ 31 января 2020

Используя sum() и type() можно достичь этого.

d = { 'test': [1, 2, 3, 4, 5] }

result = {key: sum(value) for key, value in d.items() if type(value) is list}

#{'test': 15}

Если вы вводите строки, вы можете изменить sum(value) на sum(map(int, value))

Это будет повторять каждую пару key, value в словаре, проверьте, является ли значение список и sum() результат, если True.

Чтобы умножить, вы можете импортировать numpy и изменить вышеприведенное значение на;

import numpy as np
result = {key: np.prod(value) for key, value in d.items() if type(value) is list}

#{'test': 120}
...