Python Как сложить значения одинаковых ключей в OrderedDict словаре?
как сложить значения одинаковых ключей в OrderedDict словаре? например, чтобы при вводе:
4 a 5 b 7 c 3 a 5
значения одинаковых ключей сложились? пока иду в этом направлении, но не понимаю как преобразовать value из str в int:
from collections import OrderedDict, Counter, defaultdict n = int(input('How Many N?:')) order = OrderedDict(input('key and value: ').split() for _ in range(n)) order1 = defaultdict(int) for key, value in order.items(): order1[key] += int(value) c = Counter() for d in order1: c.update(d) print(order1)
from collections import OrderedDict, Counter n = int(input('How Many N?:')) order = OrderedDict(input('Product name and volume separate by a space: ').split() for _ in range(n)) c = Counter() [c.update() for k,v in order] print(order)
Вычислить сумму всех значений словаря в Python
В этом посте мы обсудим, как вычислить сумму всех значений словаря в Python.
1. Использование sum() функция
Простое решение — использовать встроенную функцию sum() для вычисления суммы всех значений словаря. Идея состоит в том, чтобы получить представление о значениях словаря, используя dict.values() функцию и передать ее sum() .
if __name__ == ‘__main__’ :
total = sum ( d . values ( ) )
print ( total ) # 6
Вы также можете добиться этого с помощью понимания списка.
if __name__ == ‘__main__’ :
total = sum ( d [ x ] for x in d )
print ( total ) # 6
Для значений словаря с плавающей запятой рассмотрите возможность использования math.fsum() чтобы получить сумму с повышенной точностью.
2. Использование операции уменьшения
В качестве альтернативы вы можете использовать functools.reduce() функция для вычисления суммы значений словаря с лямбда-выражением. Ниже приведен простой пример, демонстрирующий использование этого:
Изменение данных в словаре — Python: Cловари и множества
Словарь в Python — изменяемый или мутабельный. Но для добавления новой пары «ключ-значение» не нужны отдельные методы, вроде спискового метода .append — достаточно обычного присваивания:
d = <> # пустой словарь d["a"] = 100 print(d) # => d["b"] = 200 d["a"] = 0 print(d) # =>
Здесь вы можете увидеть, что присваивание значения новому ключу выглядит точно так же, как и присваивание существующему. Именно эту тему мы изучим подробнее в этом уроке
Метод pop
Удаление элементов из словаря можно сделать с помощью метода pop — в этом словарь уже больше похож на список. Только вместо индекса используется ключ:
d = 'a': 1, 'b': 2> d.pop('a') # 1 d # d.pop('BANG') # KeyError: 'BANG'
Этот пример показывает, что будет, если попытаться извлечь значение по несуществующему ключу — мы получим исключение.
Однако метод pop можно вызывать с указанием значения по умолчанию. В этом случае при отсутствии ключа в словаре будет возвращено это самое значение, а исключение возбуждено не будет:
d = 'a': 1, 'b': 2> d.pop('BANG', None) d.pop('BANG', 42) # 42
Аналогом спискового pop без аргументов для словаря служит метод popitem . Этот метод извлекает ключ и значение в виде кортежа, а если словарь уже пуст, то возбуждает исключение:
d = 'a': 1> d.popitem() # ('a', 1) d.popitem() # KeyError: 'popitem(): dictionary is empty'
В пайтоне, начиная с версии 3.7, гарантирован порядок LIFO — Last In First Out. Это значит, что пары будут извлекаться в порядке обратном добавлению, от самых ранних до самых поздних по времени добавления. При этом мы можем быть уверены в том, что:
- Все пары будут извлечены
- Каждая пара будет извлечена строго один раз
Дополнение одного словаря другим
У списка есть метод extend , который расширяет один список другим. У словаря есть похожий по смыслу метод update . Но при вызове update ассоциированный объект словаря не просто получает пары «ключ-значение» из нового словаря. Происходит именно обновление данных — поэтому метод и называется update . Работает это так:
- Новые ключи дописываются в словарь
- Если какие-то ключи уже существовали до этого, то связанные с ними значения, будут заменены новыми
Так это выглядит в коде:
cart = 'apples': 2, 'oranges': 1> addon = 'oranges': 5, 'lemons': 3> cart.update(addon) cart #
В коде выше мы добавили лимоны и обновили количество апельсинов.
Копирование словаря
В случае списков мы можем сложить два списка и получить один из двух вариантов:
- Новый список из двух списков
- Копию одного списка, которую можно дополнить данными из второго
Но словари нельзя складывать, да и срезы словари тоже не поддерживают. Зато у словаря есть метод copy . Он работает как копирование списка с помощью среза [:] — при вызове он возвращает поверхностную копию из словаря. Так же ее называют «неглубокой копией» или shallow copy.
Поверхностная копия воспроизводит только структуру словаря: не копирует значения, а только создает на них новые ссылки. Тем не менее поверхностная копия — это новый словарь, который может изменять свой состав, не влияя на оригинал:
d = 'a': 1, 'b': [42]> c = d.copy() c.update('a': 10, '1k': 1024>) c # c['b'].append(None) c # d #
Словарь c получил собственную структуру, при этом его обновление не затронуло оригинальный словарь d . Однако изменение объекта списка по ссылке затронуло и оригинал, потому что при копировании словаря ссылка на список тоже скопировалась.
Очистка словаря
Списки можно очистить с помощью присваивания срезу l[:] = [] . В случае словаря вместо присваивания срезу используется метод clear .
Метод clear() удаляет все элементы из текущего словаря:
d = 'a': 1>
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях:
Сложить значения ключа в словаре
Замена в словаре значения у ключа
Вот такой словарь static Dictionary<string, string> AllData = new Dictionary<string, object>();.
Одновременное заполнение ключа и значения в словаре
Добрый вечер. Прошу помощи. Не знаю, как с помощью foreach сделать "параллельное" заполнение ключа.
Как получить все значения ключа в словаре?
Как получить все значения(Если их несколько) ключа в словаре и записать их в переменную?
Определение ключа по значению в словаре
В программеstatic void Main(string args) < Dictionary<int, string> dict = new Dictionary<int.
3850 / 2138 / 566
Регистрация: 02.09.2015
Сообщений: 5,425
def foo(bar): return sum(bar["Moscow"]["Expenses"])
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Работа с словарем в словаре, поиск Ключа по Value
Добрый день. Имеется некий словарь var oldDictionary = new Dictionary<string.
Что делать, выводит нет такого ключа в словаре?
Нумерология Кнопочки Как и многие другие коротышки, малышка Кнопочка верит во всякие чудеса.
Значения запрашиваемого ключа и ключа со словаря равны, но значение не возвращается
Я добавляю в два массива пару ключ — значение(что то типа Dictionary), потом с клавиатуры я ввожу.
Поиск значения в словаре по ключу, когда значения внутри списка смешанного типа
Доброго, проблема в следующем: В цикле перебором JSON файла получаю некоторое кол-во списков: .
Как изменить значение ключа в словаре, зная предыдущее значение?
Как изменить значение ключа в словаре, зная предыдущее значение?(тип ключа — string).
Наследственные значения в словаре
Здравствуйте. Допустим, есть словарь: i = < k1: , k2:
Поиск значения в словаре
Есть словарь, как найти путь к необходимому значению? Например: d =