2010-12-01 5 views
2

Gibt es eine Möglichkeit, ein Wörterbuch Objekt schnell abzufragen, um den Schlüssel (alle Schlüssel sind von String-Typ) mit den meisten Wörtern zu finden?Python - Finden längsten (die meisten Wörter) Schlüssel im Wörterbuch

Wenn das Element mit dem größten Schlüssel fünf Wörter hat {'das ist der größte Schlüssel': 3}, wie könnte ich das dict schnell abfragen und die int '5' zurückgeben?

Best, Georgina

+0

Muss es der Int sein, oder wäre der Schlüssel selbst akzeptabel? –

+0

Was ist, wenn es eine Krawatte gibt? – JAL

+0

Angesichts der Antwort, die Sie angenommen haben, muss ich die Absicht Ihrer Frage missverstanden haben. Ich behaupte jedoch, dass Sie Ihre Datenstrukturen schlecht gewählt haben, wenn Sie feststellen, dass Sie dies häufig tun müssen. – jtdubs

Antwort

1

Max - Anzahl der Wörter pro Schlüssel:

max(len(k.split()) for k in d.keys()) 
+1

Sie waren schnell! keine Notwendigkeit, '[' und ']' hinzuzufügen. max (len (i.split()) für i in d.iterkeys()) funktioniert gut – mshsayem

+0

@mshsayem Ich entfernte sie für ihn – jamylak

-1

Keine Verknüpfung. Einfache Art und Weise:

import re 
max([len(re.split('\s+', k)) for k in d.keys()]) 
+0

Wow - danke! Das ist perfekt! – Georgina

+1

re.split ist nicht notwendig. Plain string split() funktioniert gut. – dkamins

2

Dies gibt Ihnen den Schlüssel:

max(d, key=lambda x: len(x.split())) 

Und wenn Sie die Größe:

max(len(x.split()) for x in d) 
1
longest=max(d.keys(), key=lambda s:len(s.split())) 
len(longest.split()) 
+0

In Ordnung, er braucht nur die 5, so dass es unnötig ist. – Kabie

0
max(len(i.split()) for i in d.iterkeys()) 
0

Die Antwort ist nein.

Wenn Sie wissen möchten, ob es Lösungen gibt, die schnell zu tippen sind, dann schauen Sie sich die anderen Antworten an. Aber keiner von ihnen wird schnell auf großen Wörterbüchern laufen, was meiner Meinung nach der Geist Ihrer Frage war.

Wenn dies wirklich häufig der Fall ist, sollten Sie die Punkte in Ihrem Code so ändern, dass Schlüssel aus Ihrem Wörterbuch hinzugefügt und entfernt werden, so dass sie auch einen Heap von Schlüsseln erhalten, sortiert nach ihrer Wortanzahl.

0

Falls Sie garantieren können ...

  • gibt es keine führende oder nachgestellte Leerzeichen
  • Wörter durch genau ein Leerzeichen getrennt sind

Graf

max(key.count(' ') for key in d) + 1 
  • Fast Null neue Objekte zugeordnet, ein Iter und einige Ints
  • Dies verbraucht weniger Speicher und ist fast doppelt so schnell wie die, die Split verwenden.

Wenn Sie nicht können ....

Split

max(len(key.split()) for key in d) 
  • akzeptiert unregelmäßigen Schlüsselwerte
  • Obwohl 1/2 so schnell wie die Zählung Methode ist es nicht langsam.