# W tej wersji:
# * zamiast zwykłego słownika używamy defaultdict
#   on działa tak, że gdy próbujemy odczytać wartość z klucza, który jeszcze nie istnieje,
#   w tym momencie automatycznie wstawiana jest domyślna wartość
# * sortowanie wyników wg liczby wystąpień
import re
from collections import defaultdict
pattern = re.compile(r'\w+')

# mówimy, co ma być domyślną wartością → nie podaje się wartości 0, tylko podaje się sposób jej utworzenia
# w praktyce najczęściej podaje się nazwę typu wartości. Dla inta domyślną wartością jest 0 i dzięki temu to działa.
slownik = defaultdict(int)
with open('pan_tadeusz.txt', mode='r', encoding='utf-8') as plik:
    for linia in plik:
        for slowo in re.findall(pattern, linia):
            slownik[slowo.lower()] += 1

for slowo, ile in sorted(slownik.items(), key=lambda item: item[1], reverse=True):
    print(f'{slowo:>12} → {ile:4}')
# print('Najdłuższe słowo:', max(len(slowo) for slowo in slownik.keys()))
