Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-dict中嵌套的列表-如何对单个值求和_Python_List_Dictionary_Sum - Fatal编程技术网

Python-dict中嵌套的列表-如何对单个值求和

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的类似问题的答案,但我知道必须有一种方法通过迭代列表来实现这一点。我见过

我试着阅读了许多类似的问题(这似乎是最接近的:),但仍然难以回答下面的问题。从根本上讲

我有以下3个字典,其中列表为键:

{'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一直在反复尝试,试图系统地深入了解如何调用列表的最后一个值。但如果我能做到这一点,我会把它存储在一个新的列表中,在遍历之后求和吗?我想你需要后退一步,以更广泛的方式告诉我们你正在尝试做什么。这似乎是一种错误的数据管理方式。第二个选项让我感觉更糟