Python 查询和合计列表中的certian元素

Python 查询和合计列表中的certian元素,python,list,Python,List,因此,我对python非常陌生,我创建了一个如下所示的信息列表: 格式为日期、店铺、总收入(当天)和交易(当天) 所以本质上我想做的是查询某个商店的总收入。因此,用户应该输入例如“Sals”,它将根据列表中的数据合计该商店的收入。这个问题可能有一个非常简单的解决方案,但我一直在网上四处寻找,决定是时候问你们了。如果我能得到一些关于它是如何工作的解释,这将真正帮助我,也帮助我增长我的知识!谢谢大家的贡献 使用sum() Ex: import datetime data = [[datetime.d

因此,我对python非常陌生,我创建了一个如下所示的信息列表:

格式为日期、店铺、总收入(当天)和交易(当天)

所以本质上我想做的是查询某个商店的总收入。因此,用户应该输入例如“Sals”,它将根据列表中的数据合计该商店的收入。这个问题可能有一个非常简单的解决方案,但我一直在网上四处寻找,决定是时候问你们了。如果我能得到一些关于它是如何工作的解释,这将真正帮助我,也帮助我增长我的知识!谢谢大家的贡献

使用
sum()

Ex:

import datetime
data = [[datetime.datetime(2012, 3, 1, 0), 'PizzaHut', 2839.60, 25], [datetime.datetime(2012, 12, 4, 0), 'Dominoes', 2839.60, 25], [datetime.datetime(2012, 11, 8, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 6, 4, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 8, 12, 0), 'PizzaHut', 2839.60, 25]]
key = 'Sals'

print( sum(i[2] for i in data if i[1] == key) )
5679.2
Sum: 5679.2
Average: 2839.6
输出:

import datetime
data = [[datetime.datetime(2012, 3, 1, 0), 'PizzaHut', 2839.60, 25], [datetime.datetime(2012, 12, 4, 0), 'Dominoes', 2839.60, 25], [datetime.datetime(2012, 11, 8, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 6, 4, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 8, 12, 0), 'PizzaHut', 2839.60, 25]]
key = 'Sals'

print( sum(i[2] for i in data if i[1] == key) )
5679.2
Sum: 5679.2
Average: 2839.6
按注释编辑

输出:

import datetime
data = [[datetime.datetime(2012, 3, 1, 0), 'PizzaHut', 2839.60, 25], [datetime.datetime(2012, 12, 4, 0), 'Dominoes', 2839.60, 25], [datetime.datetime(2012, 11, 8, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 6, 4, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 8, 12, 0), 'PizzaHut', 2839.60, 25]]
key = 'Sals'

print( sum(i[2] for i in data if i[1] == key) )
5679.2
Sum: 5679.2
Average: 2839.6
按日期分组

使用
sum()

Ex:

import datetime
data = [[datetime.datetime(2012, 3, 1, 0), 'PizzaHut', 2839.60, 25], [datetime.datetime(2012, 12, 4, 0), 'Dominoes', 2839.60, 25], [datetime.datetime(2012, 11, 8, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 6, 4, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 8, 12, 0), 'PizzaHut', 2839.60, 25]]
key = 'Sals'

print( sum(i[2] for i in data if i[1] == key) )
5679.2
Sum: 5679.2
Average: 2839.6
输出:

import datetime
data = [[datetime.datetime(2012, 3, 1, 0), 'PizzaHut', 2839.60, 25], [datetime.datetime(2012, 12, 4, 0), 'Dominoes', 2839.60, 25], [datetime.datetime(2012, 11, 8, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 6, 4, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 8, 12, 0), 'PizzaHut', 2839.60, 25]]
key = 'Sals'

print( sum(i[2] for i in data if i[1] == key) )
5679.2
Sum: 5679.2
Average: 2839.6
按注释编辑

输出:

import datetime
data = [[datetime.datetime(2012, 3, 1, 0), 'PizzaHut', 2839.60, 25], [datetime.datetime(2012, 12, 4, 0), 'Dominoes', 2839.60, 25], [datetime.datetime(2012, 11, 8, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 6, 4, 0), 'Sals', 2839.60, 25], [datetime.datetime(2012, 8, 12, 0), 'PizzaHut', 2839.60, 25]]
key = 'Sals'

print( sum(i[2] for i in data if i[1] == key) )
5679.2
Sum: 5679.2
Average: 2839.6
按日期分组


如果经常搜索,我会编一本字典

res = {}
def builddict(data):
  for ele in data:
    res.setdefault(ele[1], 0)
    res[ele[1]] += ele[2] * ele[3]

builddict(data)
print (res['Sals'])

如果经常搜索,我会编一本字典

res = {}
def builddict(data):
  for ele in data:
    res.setdefault(ele[1], 0)
    res[ele[1]] += ele[2] * ele[3]

builddict(data)
print (res['Sals'])
您可以利用以下优势使代码更具可读性:

import datetime

from collections import namedtuple

dailySales = namedtuple('Data', ['day', 'store', 'income', 'transactions'])

data = [[datetime.datetime(2012, 3, 1, 0), 'PizzaHut', 2839.60, 25],
        [datetime.datetime(2012, 12, 4, 0), 'Dominoes', 2839.60, 25],
        [datetime.datetime(2012, 11, 8, 0), 'Sals', 2839.60, 25],
        [datetime.datetime(2012, 6, 4, 0), 'Sals', 2839.60, 25],
        [datetime.datetime(2012, 8, 12, 0), 'PizzaHut', 2839.60, 25]]

namedData = [dailySales(*i) for i in data]

key = 'Sals'

print(sum(j.income for j in namedData if j.store==key))
#5679.2
您可以利用以下优势使代码更具可读性:

import datetime

from collections import namedtuple

dailySales = namedtuple('Data', ['day', 'store', 'income', 'transactions'])

data = [[datetime.datetime(2012, 3, 1, 0), 'PizzaHut', 2839.60, 25],
        [datetime.datetime(2012, 12, 4, 0), 'Dominoes', 2839.60, 25],
        [datetime.datetime(2012, 11, 8, 0), 'Sals', 2839.60, 25],
        [datetime.datetime(2012, 6, 4, 0), 'Sals', 2839.60, 25],
        [datetime.datetime(2012, 8, 12, 0), 'PizzaHut', 2839.60, 25]]

namedData = [dailySales(*i) for i in data]

key = 'Sals'

print(sum(j.income for j in namedData if j.store==key))
#5679.2

令人惊叹的!那个么我该如何计算商店的平均销售额呢?干杯:)@Jasotufy2计算平均值只需做
print(sum([i[2]表示数据中的i,如果i[1]='Sals'])/len([i表示数据中的i,如果i[1]='Sals'])
好的,还有一个问题。。。如果我想使用日期而不是分支机构名称来查询结果,我该怎么做?只需将键更改为您所需的日期,例如:
key=datetime.datetime(2012,12,4,0)
这一行
d[I[1]]。将(I)
附加到
d[I[0]]。附加(I)
仍然无法让它正常工作:(你能帮我把它贴在代码里吗?非常感谢!太棒了!我该如何计算商店的平均销售额呢?干杯:)@Jasotufy2计算平均值只需做
print(sum([I[2]表示数据中的I,如果I[1]='Sals'])/len([I表示数据中的I,如果I[1]='Sals']))
好的,还有一个问题……如果我想使用日期而不是分行名称来查询结果,我该怎么做?只需将键更改为您所需的日期,例如:
key=datetime.datetime(2012,12,4,0)
这一行
d[I[1]]。追加(I)
d[I[0]]。追加(I)
仍然不能很好地使用它:(你能帮我把它写在代码中吗?非常感谢!-对python甚至编程来说都是新手并不是不尝试的借口(不,“环视网络”不是“尝试”)。我从来没有说过我没有尝试过?当然,我尝试过。我尝试了很长一段时间不同的解决方案,但都找不到任何符合我要求的解决方案。所以我决定是时候问问Stackoverflow的帮助社区了:)我不是在说你“在网上四处寻找”的“解决方案”。如果您自己尝试过某件事,那么您应该发布您的尝试,并解释您遇到的问题,而不是要求提供现成的解决方案。-对于python来说,甚至对于编程来说,都不是不尝试的借口(不,“环视网络”不是“尝试”)。我从来没有说过我没有尝试过?当然,我尝试过。我尝试了很长一段时间不同的解决方案,但找不到任何符合我要求的解决方案。因此,我决定是时候问问Stackoverflow的帮助社区了:)我不是说你“在网上四处寻找”的“解决方案”。如果你自己做了尝试,那么你应该发布你的尝试并解释你有什么问题,而不是要求现成的解决方案。