Seite 1 von 1
Kann man das besser schreiben?
Verfasst: Montag 22. Mai 2017, 22:38
von Alfons Mittelmeyer
Hierbei ist how_many ein dictionary und der Wert value ein set
Code: Alles auswählen
def most_of(how_many):
count = 0
element = None
for key,value in how_many.items():
if len(value) > count:
count = len(value)
element = key
return element,count
Es geht darum, den key für das längste set zu bestimmen und auch die Länge des sets zurückzuliefern
Re: Kann man das besser schreiben?
Verfasst: Montag 22. Mai 2017, 23:14
von BlackJack
Code: Alles auswählen
from operator import itemgetter
def most_of(how_many):
return max(((k, len(v)) for k, v in how_many.items()), key=itemgetter(1))
Wobei sich der Aufrufer um die Ausnahme kümmern muss die bei einem leeren Argument entsteht.
Re: Kann man das besser schreiben?
Verfasst: Dienstag 23. Mai 2017, 01:18
von pillmuncher
Was soll als Ergebnis rauskommen, wenn es mehr als ein längstes set gibt?
Für ein beliebiges längstes set geht das hier:
Code: Alles auswählen
>>> from collections import Counter
>>> d = {'a': {1, 2, 3}, 'b': {4, 5, 6}, 'c': {7, 8}}
>>> c = Counter({k: len(v) for k, v in d.items()})
>>> c.most_common(1)[0]
('a', 3)
Ist aber nicht besser als BlackJacks Lösung mit
max().
Re: Kann man das besser schreiben?
Verfasst: Dienstag 23. Mai 2017, 21:33
von Alfons Mittelmeyer
@Pillmuncher und BlackJack: Danke für eure Lösungen. Ich hatte mich bisher noch nicht mit Generatoren befasst, aber jetzt habe ich das gleich einmal zum ersten Mal einmal angewandt:
Code: Alles auswählen
floatcoords = canvas.coords(item)
coords = (int(i) for i in floatcoords)
Re: Kann man das besser schreiben?
Verfasst: Dienstag 23. Mai 2017, 22:37
von snafu
Das kannst du auch kürzer haben mit: