[英]Querying and totaling certian elements in a list
因此,我是python的新手,並且創建了如下所示的信息列表:
格式為日期,商店,當日總收入(當日)和交易(當日)
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]
因此,基本上我想做的就是查詢某個商店的總收入。 因此,用戶應輸入“ Sals”,它將根據列表中的數據總計該商店的收入。 解決這個問題的方法可能很簡單,但是我一直在網上四處尋找,因此決定是時候讓我問你們了。 如果我能對它的工作方式有一些解釋,那對我既有幫助,也能幫助我增進知識! 謝謝大家的貢獻!
使用sum()
例如:
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
根據評論編輯
import datetime
import collections
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'
d = collections.defaultdict(list)
for i in data:
d[i[1]].append(i)
print( "Sum: {0}".format(sum(i[2] for i in d[key])) )
print( "Average: {0}".format(sum(i[2] for i in d[key])/len(d[key])) )
輸出:
Sum: 5679.2
Average: 2839.6
按日期分組
key = datetime.datetime(2012, 12, 4, 0)
d = collections.defaultdict(list)
for i in data:
d[i[0]].append(i)
如果搜索頻繁,我會建立字典。
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'])
您可以利用namedtuple來提高代碼的可讀性:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.