#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}