簡體   English   中英

查詢和匯總列表中的證書元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM