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:

Code: Alles auswählen

map(int, canvas.coords(item))