Суммируйте элементы в списке списков и найдите максимум в Python - PullRequest
1 голос
/ 17 октября 2011

Я не знаю, как это сделать: У меня есть list из list s, определенные так:

list=[[day,type,expense],[...]];

день и расходы int, тип string

Мне нужно найти максимальный расход за день. Пример:

list=[[1,'food',15],[4,'rent', 50],[1,'other',60],[8,'bills',40]]

Мне нужно сложить элементы, которые имеют один и тот же день, и найти день с самыми высокими затратами.

Результат должен быть:

day:1, total expenses:75

Ответы [ 3 ]

5 голосов
/ 17 октября 2011

Разве дефолт не так просто?

import pprint
from collections import defaultdict
from operator import itemgetter

l = [[1, 'food', 15], [4, 'rent', 50], [1, 'other', 60], [8, 'bills', 40]]
d = defaultdict(int)
for item in l:
    d[item[0]] += item[2]
pprint.pprint(dict(d))
print max(d.iteritems(), key=itemgetter(1))

Результат:

{1: 75, 4: 50, 8: 40}
(1, 75)
2 голосов
/ 17 октября 2011
data=[[1,'food',15],[4,'rent', 50],[1,'other',60],[8,'bills',40]]

# put same days together
data.sort()


# aggregate the days
from itertools import groupby
from operator import itemgetter

grouped = groupby(data, key=itemgetter(0))


# sum values by day
summed = ((day, sum(val for (_,_,val) in day_group))
          for day, day_group in grouped)


# get the max
print max(summed, key=itemgetter(1))
0 голосов
/ 17 октября 2011
list = [[1, 'food', 15], [4,'rent', 50], [1, 'other', 60], [8, 'bills', 40]]
hash = {}
for item in list:
    if item[0] not in hash.keys():
        hash[item[0]] = item[2]
    else:
        hash[item[0]] += item[2]

for (k, v) in hash:
    # print key: value

или если вы просто хотите самый дорогой день.

for (k, v) in hash:
    if (v == max(hash.values()):
        #print k: v
...