Python-dict中嵌套的列表-如何对单个值求和
我试着阅读了许多类似的问题(这似乎是最接近的:),但仍然难以回答下面的问题。从根本上讲 我有以下3个字典,其中列表为键:Python-dict中嵌套的列表-如何对单个值求和,python,list,dictionary,sum,Python,List,Dictionary,Sum,我试着阅读了许多类似的问题(这似乎是最接近的:),但仍然难以回答下面的问题。从根本上讲 我有以下3个字典,其中列表为键: {'milk': ['gallons', 5, 10, 50]} {'eggs': ['cartons', 5, 2, 10]} {'bacon': ['packages', 5, 7, 35]} 我希望能够对每个嵌套列表的最后一个值求和,并将95的预期单个值打印到屏幕上 我已经看到了涉及lambdas的类似问题的答案,但我知道必须有一种方法通过迭代列表来实现这一点。我见过
{'milk': ['gallons', 5, 10, 50]}
{'eggs': ['cartons', 5, 2, 10]}
{'bacon': ['packages', 5, 7, 35]}
我希望能够对每个嵌套列表的最后一个值求和,并将95
的预期单个值打印到屏幕上
我已经看到了涉及lambdas的类似问题的答案,但我知道必须有一种方法通过迭代列表来实现这一点。我见过sum和Counter的用法,我愿意接受任何解释。
先谢谢你
更新/添加上下文
感谢那些已经做出回应的人。我意识到可能需要更多的背景来回答这个问题
这些条目来自此类:
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()
回溯(最近一次呼叫最后一次):
文件“screery_store.py”,第156行,在
总计=总和(在我的购物车中,y的总和(y[-1]),x的总和(值())
文件“screery_store.py”,第156行,在
总计=总和(在我的购物车中,y的总和(y[-1]),x的总和(值())
AttributeError:“str”对象没有属性“值”
这是一个奇怪的结构。看起来您的值是列表,而不是键。如果我假设这三个对象在一个数组中,下面是一个尝试:
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
这是一个奇怪的结构。看起来您的值是列表,而不是键。如果我假设这三个对象在一个数组中,下面是一个尝试:
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
假设您想在列表中列出词典,请使用以下代码。需要两个
for
循环:第一个循环遍历foods
,这是一个字典列表,第二个循环遍历当前正在遍历的字典中的值food.values()
生成字典中的列表,并从当前迭代的列表中选择最后一个元素
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
假设您想在列表中列出词典,请使用以下代码。需要两个
for
循环:第一个循环遍历foods
,这是一个字典列表,第二个循环遍历当前正在遍历的字典中的值food.values()
生成字典中的列表,并从当前迭代的列表中选择最后一个元素
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
我假设,假设你的问题的性质可能是一个课堂作业,在这种情况下,我会认真考虑问你的老师/教授他们是否想要单键字典,因为他们似乎更愿意他们而不是你所设计的数据结构。也就是说,@contrum有一个很好的解决方案,可以将它作为一个多键字典来解决;否则,由于您已经声明要迭代字典,并且添加列表非常容易,因此以下内容对您来说应该很好,同时也有一个puntastic名称:
def getSum(dictList):
result = 0
dictList = [{'milk': ['gallons', 5, 10, 50]}, {'eggs': ['cartons', 5, 2, 10]}, {'bacon': ['packages', 5, 7, 35]}]
for richard in dictList:
for key in richard:
result += richard[key][len(richard[key]) - 1]
return result
我假设,假设你的问题的性质可能是一个课堂作业,在这种情况下,我会认真考虑问你的老师/教授他们是否想要单键字典,因为他们似乎更愿意他们而不是你所设计的数据结构。也就是说,@contrum有一个很好的解决方案,可以将它作为一个多键字典来解决;否则,由于您已经声明要迭代字典,并且添加列表非常容易,因此以下内容对您来说应该很好,同时也有一个puntastic名称:
def getSum(dictList):
result = 0
dictList = [{'milk': ['gallons', 5, 10, 50]}, {'eggs': ['cartons', 5, 2, 10]}, {'bacon': ['packages', 5, 7, 35]}]
for richard in dictList:
for key in richard:
result += richard[key][len(richard[key]) - 1]
return result
试试这个:
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。尝试以下操作:
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。列表不能是字典中的键。列表只能是值(如示例中所示)。另外,这三个字典是在一个更大的数据结构中吗?到目前为止你尝试了什么?如果你的字典是一个和([a[k][3]代表a中的k])将打印95,但是你必须写一个{‘培根’:[‘包’,5,7,35],‘鸡蛋’:[‘纸箱’,5,2,10],‘牛奶’:[‘加仑’,5,10,50]}我尝试过调整一些东西,比如和,尝试用解决方案进行实验,看看它是否可以应用到我的场景中。Tbh一直在反复尝试,试图系统地深入了解如何调用列表的最后一个值。但如果我能做到这一点,我会把它存储在一个新的列表中,在遍历之后求和吗?我想你需要后退一步,以更广泛的方式告诉我们你正在尝试做什么。这似乎是管理数据的错误方法。列表不能是字典中的键。列表只能是值(如示例中所示)。另外,这三个字典是在一个更大的数据结构中吗?到目前为止你尝试了什么?如果你的字典是一个和([a[k][3]代表a中的k])将打印95,但是你必须写一个{‘培根’:[‘包’,5,7,35],‘鸡蛋’:[‘纸箱’,5,2,10],‘牛奶’:[‘加仑’,5,10,50]}我尝试过调整一些东西,比如和,尝试用解决方案进行实验,看看它是否可以应用到我的场景中。Tbh一直在反复尝试,试图系统地深入了解如何调用列表的最后一个值。但如果我能做到这一点,我会把它存储在一个新的列表中,在遍历之后求和吗?我想你需要后退一步,以更广泛的方式告诉我们你正在尝试做什么。这似乎是一种错误的数据管理方式。第二个选项让我感觉更糟