我尝试阅读许多类似的问题(这似乎最接近:Python sum dict values based on keys),但仍在努力回答下面的问题。将其归结为基础
我有以下3个词典,列表为键:
{'milk': ['gallons', 5, 10, 50]}
{'eggs': ['cartons', 5, 2, 10]}
{'bacon': ['packages', 5, 7, 35]}
我希望能够将每个嵌套列表的最后一个值相加,并在屏幕上打印出预期的单值 95
。
我已经看到了涉及lambdas的类似问题的答案,但我知道必须有一种方法来迭代列表。我已经看到使用总和和计数器,并且对任何解释持开放态度。 提前谢谢。
更新/添加上下文
感谢那些已经回复的人。我意识到可能需要更多的背景来回答这个问题。
这些条目来自这个类:
class GroceryCart(dict):
def __init__(self):
self = {}
def addToCart(self, item, units, quantity, price):
item_total = quantity*price
self.update({item:[units, quantity, price, item_total]})
def returnCart(self):
return self
my_cart = GroceryCart()
这就是你获得信息的时髦结构的地方。
我在下面尝试了@ ggorlan的回复,但是在没有使用str值的情况下得到了追溯错误.values()
Traceback (most recent call last):
File "grocery_store.py", line 156, in <module>
total = sum(sum(y[-1] for y in x.values()) for x in my_cart)
File "grocery_store.py", line 156, in <genexpr>
total = sum(sum(y[-1] for y in x.values()) for x in my_cart)
AttributeError: 'str' object has no attribute 'values'
答案 0 :(得分:2)
这是一个奇怪的结构。看起来您的值是列表,而不是键。如果我假设这三个对象在一个数组中,这是一个尝试:
food = [
{'milk': ['gallons', 5, 10, 50]},
{'eggs': ['cartons', 5, 2, 10]},
{'bacon': ['packages', 5, 7, 35]}
]
total = sum(list(x.values())[0][-1] for x in food)
print(total) # 95
答案 1 :(得分:1)
假设您希望列表中包含词典,请使用以下代码。需要两个for
循环:第一个循环遍历foods
,这是一个字典列表,第二个循环遍历当前正在迭代的字典中的值。 food.values()
生成字典中的列表,lst[-1]
选择当前正在迭代的列表中的最后一个元素。
foods = [
{'milk': ['gallons', 5, 10, 50]},
{'eggs': ['cartons', 5, 2, 10]},
{'bacon': ['packages', 5, 7, 35]}
]
sum = 0
for food in foods:
for details in food.values():
sum += details[-1]
print(sum) # 95
否则假设您希望将它们作为一个字典,请使用以下代码。这次只需要一个for
循环来遍历字典的每个值。
foods = {
'milk': ['gallons', 5, 10, 50],
'eggs': ['cartons', 5, 2, 10],
'bacon': ['packages', 5, 7, 35]
}
sum = 0
for lst in foods.values():
sum += lst[-1]
print(sum) # 95
答案 2 :(得分:0)
我认为,鉴于你的问题的性质,它可能是一个课堂作业,在这种情况下,我会认真考虑问你的老师/教授他们是否想要单键词典,因为它似乎更多可能他们想要的而不是你设计的数据结构。话虽这么说,@ contrum有一个可爱的解决方案,可以解决它作为一个多键词典;否则,既然您已经声明要迭代字典并且很容易追加列表,那么以下内容应该对您有用,同时还有一个非常简单的名称:
from tensorflow.contrib import keras
答案 3 :(得分:0)
试试这个:
foods = {
'milk': ['gallons', 5, 10, 50],
'eggs': ['cartons', 5, 2, 10],
'bacon': ['packages', 5, 7, 35]
}
s = sum([item[-1] for item in foods.values()])
s
将是95。