Kann man das besser schreiben?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

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
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.
Benutzeravatar
pillmuncher
User
Beiträge: 1484
Registriert: Samstag 21. März 2009, 22:59
Wohnort: Pfaffenwinkel

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().
In specifications, Murphy's Law supersedes Ohm's.
Alfons Mittelmeyer
User
Beiträge: 1715
Registriert: Freitag 31. Juli 2015, 13:34

@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)
Benutzeravatar
snafu
User
Beiträge: 6738
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Das kannst du auch kürzer haben mit:

Code: Alles auswählen

map(int, canvas.coords(item))
Antworten