Verfasst: Freitag 30. Mai 2008, 16:18
Braucht Python2.5, sry
Man könnte auch den itemgetter durch lambdas ersetzen...oder updaten.
Man könnte auch den itemgetter durch lambdas ersetzen...oder updaten.
Seit 2002 Diskussionen rund um die Programmiersprache Python
https://www.python-forum.de/
Code: Alles auswählen
from itertools import groupby, imap
from operator import itemgetter
a = [(5224,"2005"),(5524,"2003"),(1524,"2005"),(554,"2008"),(5824,"2005"),(524,"2008")]
s = sorted((int(year), area) for area, year in a)
data = {}
for k, g in groupby(s, itemgetter(0)):
data[k] = sum(imap(itemgetter(1), g))
years = sorted(data.keys())
max_area = sorted(data.iteritems(),
key=lambda elem: (elem[1], elem[0])
)[-1][0] # max and year
for year, text in [
(years[0], "earliest %d: %d"),
(years[-1], "oldest %d: %d"),
(max_area, "biggest area %d: %d")]:
print text % (year, data[year])
print "full area: %d" % sum(data.itervalues())
Code: Alles auswählen
from itertools import groupby, imap
from operator import itemgetter
a = [(5224,"2005"),(5524,"2003"),(1524,"2005"),(554,"2008"),(5824,"2005"),(524,"2008")]
def datum_area(table):
s = sorted((int(year), area) for area, year in table)
data = {}
for k, g in groupby(s, itemgetter(0)):
data[k] = sum(imap(itemgetter(1), g))
years = sorted(data.keys())
max_area = sorted(data.iteritems(),
key=lambda elem: (elem[1], elem[0])
)[-1][0] # max and year
for year, text in [
(years[0], "earliest %d: %d"),
(years[-1], "oldest %d: %d"),
(max_area, "biggest area %d: %d")]:
print text % (year, data[year])
alt = years[0]
#area_alt = ?
gross = years[1]
#area_gross = ?
jung = years[2]
#area_jung = ?
area_full = sum(data.itervalues())
return area_full, alt, area_alt, gross, area_gross, jung, area_jung
Code: Alles auswählen
from itertools import groupby, imap
from operator import itemgetter
a = [(5224,"2005"),(5524,"2003"),(1524,"2005"),(554,"2008"),(5824,"2005"),(524,"2008")]
def datum_area(table):
s = sorted((int(year), area) for area, year in table)
data = {}
for k, g in groupby(s, itemgetter(0)):
data[k] = sum(imap(itemgetter(1), g))
years = sorted(data.keys())
max_area = sorted(data.iteritems(),
key=lambda elem: (elem[1], elem[0])
)[-1][0] # max and year
results = {}
keys = "total earliest oldest biggest".split()
t, e, o, b = keys
for year, key in [
(years[0], e),
(years[-1], o),
(max_area, b)]:
results[key] = (year, data[year])
results[t] = sum(data.itervalues())
return [results[k] for k in keys]
print datum_area(a)
Code: Alles auswählen
from itertools import groupby, imap, izip
from operator import itemgetter
a = [(5224,"2005"),(5524,"2003"),(1524,"2005"),(554,"2008"),(5824,"2005"),(524,"2008")]
def datum_area(table):
s = sorted((int(year), area) for area, year in table)
data = {}
for k, g in groupby(s, itemgetter(0)):
data[k] = sum(imap(itemgetter(1), g))
years = sorted(data.keys())
max_area = sorted(data.iteritems(),
key=lambda elem: (elem[1], elem[0])
)[-1][0] # max and year
results = {}
keys = "total earliest oldest biggest".split()
for year, key in izip(
[ years[0], years[-1], max_area],
keys[1:]):
results[key] = (year, data[year])
results[keys[0]] = sum(data.itervalues())
return [results[k] for k in keys]
print datum_area(a)