Значения словаря = сумма 2-х списков в i

#python #list #dictionary

#python #Список #словарь

Вопрос:

У меня есть следующий 2d-список и словарь:

 List2d = [['1', '55', '32', '667' ],

         ['43', '76', '55', '100'],

         ['23', '70', '15', '300']] 

dictionary = {'New York':0, "London": 0, "Tokyo": 0, "Toronto": 0 }
 

Как мне заменить все значения словаря суммами столбцов в List2d? Таким образом, словарь будет выглядеть следующим образом:

 dictionary= {'New York' : 67, 'London': 201, 'Tokyo': 102, 'Toronto': 1067}

#67 comes from adding up first column (1 43 23) in 'List2d'

#201 comes from adding up second column (55 76 70) in 'List2d'

#102 comes from adding up third column (32 55 15) in 'List2d'

#1067 comes from adding up fourth column (667 100 300) in 'List2d'
 

Комментарии:

1. Откуда вы знаете, как сопоставить ключи словаря с индексом столбца? Дикт неупорядочен.

2. Я пытаюсь сделать так, чтобы каким бы ни был первый ключ в словаре, значение = сумма первого столбца, второй ключ в словаре, значение = сумма второго столбца и т. Д

Ответ №1:

Начиная с Python 3.7, ключи в dict упорядочены.

Вы можете использовать enumerate, чтобы отслеживать положение элемента в dict во время итерации по нему. Затем вы используете в i качестве индекса в каждой строке 2d-списка, преобразуете каждое значение в int и суммируете результат.

 List2d = [['1', '55', '32', '667' ],
         ['43', '76', '55', '100'],
         ['23', '70', '15', '300']] 

dictionary = {'New York':0, "London": 0, "Tokyo": 0, "Toronto": 0 }

for i, city in enumerate(dictionary.keys()):
    dictionary[city] = sum(int(row[i]) for row in List2d)

print(dictionary)
# {'New York': 67, 'London': 201, 'Tokyo': 102, 'Toronto': 1067}
 

Ответ №2:

Используйте pandas

 #!pip install pandas
import pandas as pd
pd.DataFrame(List2d, columns=dictionary.keys()).astype(int).sum(axis=0).to_dict()
 

вывод:

 {'New York': 67, 'London': 201, 'Tokyo': 102, 'Toronto': 1067}