Мне нужно создать словарь, который содержит сумму элементов другого словаря наиболее эффективным с вычислительной точки зрения способом.
Основной словарь имеет вид:
{'11': [0.76700000000000002, 3455.0, 0.76700000000000002, 0.76700000000000002, 34.0, 0.76700000000000002], '22': [34.0, 0.76700000000000002]}
Мне нужно создать новый словарь, содержащий те же ключи, но с суммой целых чисел из первого словаря. Результат будет таким:
{'11': [3458], '22': [34.767]}
Если вы хотите создать новый словарь (а не делать дополнение к тому, который у вас уже есть), самый простой и эффективный способ — использовать словари сжатия вместе со встроенной функцией
sum
:В Питоне 3:
В Питоне 2:
Результат:
Причина использования
dict.iteritems
в Python 2 заключается в том, чтоdict.items
в этой версии он возвращает список кортежей ключ/значение, что может привести к проблемам с памятью и эффективностью при работе с большими словарями.iteritems
возвращает итератор. В Python 3 онdict.items
возвращает объект представления , который является итерируемым.Если вы хотите максимально избежать ошибок точности, вызванных промежуточными суммами и их представлением с плавающей запятой, вы можете использовать
math.fsum
:Питон 3:
Питон 2:
Вылет из:
Поскольку вы создаете список только с одним элементом, если вы не собираетесь использовать этот список позже, создайте ключи только с суммой:
Вылет из:
что вам нужно сделать, это перебирать словарь и каждый элемент перебирать список и добавлять его
или если вы предпочитаете это в функции:
затем просто вызовите функцию:
Для получения дополнительной информации об использовании словарей я нашел документацию, которая может быть вам полезна: