Chciałbym uzyskać pierwszą literę z maksymalną liczbą znaków.Zdobądź pierwszą literę z maksimum występowania ciągu znaków
Na przykład:
"google" -> g
"azerty" -> a
"bbbaaa" -> b
Mam już kod do pracy, używając klawiszy OrdererDict() aby uniknąć automatycznych rearangement:
from collections import OrderedDict
sentence = "google"
d = OrderedDict()
for letter in sentence:
if letter not in d.keys():
d[letter] = sentence.count(letter)
print(max(d, key=d.get)) # g
ale szukam dla ewentualnego jednej liniowej lub bardziej elegancki rozwiązanie (jeśli to możliwe).
Uwaga: Próbowałem już używać Counter() ale to nie działa, ponieważ dict w python nie pamiętam kolejności, które zostały wstawione klucze.
np
from collections import Counter
sentence = "bbbaaa"
c = Counter(sentence)
print(c.most_common()[0][0]) # have 50% chances of printing 'a' rather than 'b'.
Bonus pytanie: Czy ktoś tłumaczy, dlaczego OrderedDict() nie są domyślne zachowanie słownika w python?
OrderedDict() jest wolniejszy niż dict. –
Dlaczego potrzebujesz OrderedDict w ogóle? jeśli chcesz się upewnić, że klucze nie są nadmiernie napisane, użyj [metody setdefault lub DefaultDict] (http://stackoverflow.com/questions/3483520/use-cases-for-the-setdefault-dict-method) i dla "jednego liniowca" można po prostu zredukować pętlę do zrozumienia – JGreenwell
Zobacz [OrderedDict vs defaultdict vs dict] (http://stackoverflow.com/a/19643045/298607) – dawg