У меня два словаря:питона multipling два словаря
prices = {"banana": 4,"apple": 2}
stock = {"banana": 6,"apple": 0,}
Как я могу получить сумму объединения значений от 1 и 2 словаря (4 * 6 + 2 * 0 - в этом примере)?
У меня два словаря:питона multipling два словаря
prices = {"banana": 4,"apple": 2}
stock = {"banana": 6,"apple": 0,}
Как я могу получить сумму объединения значений от 1 и 2 словаря (4 * 6 + 2 * 0 - в этом примере)?
>>> prices = {"banana": 4,"apple": 2}
>>> stock = {"banana": 6,"apple": 0}
>>> {k: prices[k] * stock[k] for k in prices.viewkeys() & stock.viewkeys()}
{'banana': 24, 'apple': 0}
>>> prices = {"banana": 4,"apple": 2}
>>> stock = {"banana": 6,"apple": 0}
>>> sum(prices[k] * stock[k] for k in stock)
24
сумма (цены [k] * stock [k] для k на складе) отличный ответ. – user2469891
@ user2469891 Вы можете [принять ответ] (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235), если он сработает для вас. –
петля над пересечением ключей:
mult = {}
for key in prices.viewkeys() & stock.viewkeys():
mult[key] = prices[key] * stock[key]
Это может быть упрощено до ДИКТ понимания:
mult = {key: prices[key] * stock[key] for key in prices.viewkeys() & stock.viewkeys()}
Это использует dict.viewkeys()
метод (dict.keys()
в Python 3), который действует как set
; оператор &
действует как оператор пересечения на множествах и дает вам все ключи, которые присутствуют в и словари.
Подводя общий запас, использовать sum()
функцию:
total_stock = sum(prices[key] * stock[key] for key in prices.viewkeys() & stock.viewkeys())
Демонстрация:
>>> prices = {"banana": 4,"apple": 2}
>>> stock = {"banana": 6,"apple": 0}
>>> {key: prices[key] * stock[key] for key in prices.viewkeys() & stock.viewkeys()}
{'banana': 24, 'apple': 0}
>>> sum(prices[key] * stock[key] for key in prices.viewkeys() & stock.viewkeys())
24
prices = {"banana": 4,"apple": 2}
stock = {"banana": 6,"apple": 0,}
t=0
for i in prices:
t+=prices[i]*stock[i]
print t
'dict.keys()' не требуется, итерация по типу возвращает только его ключи. –
Спасибо .. Отредактировано – tusharmakkar08
Может быть, немного короче и аккуратнее, чем другие решения.
>>> prices = {"banana": 4, "apple": 2}
>>> stock = {"banana": 6, "apple": 0}
>>> {key: value * stock.get(key, 0) for key, value in prices.items()}
{'banana': 24, 'apple': 0}
Использование prices.iteritems()
в Python 2.
Это позволяет избежать создания нового набора, и технически использует только один словарь поиска. Если вы хотите просто сумму, используйте:
>>> sum(value * stock.get(key, 0) for key, value in prices.items())
24
Это отличает решение от @Martijn и меня, так как оно также умножает ключи, которые существуют только в 'prices' – jamylak
@jamylak. Я опубликовал это решение в основном из-за моего отвращения к символу ['&'] (http://3.bp.blogspot.com/-ae-Jy6EBy00/T06tOwXz80I/AAAAAAAAbug/O3SxiaOSzqU/s1600/4dandforsand.jpg). – Volatility
@ Volatility lol для рисунка. : D –
Не предполагая ключи идентичны
sum(prices[k] * stock.get(k, 0) for k in prices)
Что такое ожидаемое поведение, если два словаря не одни и те же ключи? –
Я сделал запрос, что умножение должно быть добавлено в 'collections.Counter', но оно не прошло: https://groups.google.com/forum/?fromgroups#!topic/python-ideas/-HYxQK6cbps – jamylak
(вероятно, к лучшему, хотя), хотя это было бы хорошим примером для использования – jamylak