Odwrócenie słownika

Zadanie 13 z 15 · rozdział 17Trudność: 1 z 3dictsetdefaultwyrażenie słownikowe

Treść zadania

Wczytaj n par osoba miasto — słownik, który każdej osobie przypisuje miasto, w którym mieszka. „Odwróć” go: zbuduj słownik miasto → lista osób mieszkających w tym mieście.

Wypisz:

  1. dla każdego miasta (w kolejności alfabetycznej) linię miasto: osoba1, osoba2, … z osobami posortowanymi alfabetycznie,
  2. w ostatniej linii słownik {miasto: liczba osób} z miastami w kolejności alfabetycznej, zbudowany wyrażeniem słownikowym i wypisany przez print(slownik).

Dane wejściowe

  • 1. linia: n
  • następnie n linii: osoba miasto — dwa słowa oddzielone spacją

Dane wyjściowe

  • Po jednej linii dla każdego miasta: nazwa miasta, dwukropek, spacja i osoby oddzielone przecinkiem ze spacją.
  • Ostatnia linia: słownik w postaci {'Miasto': liczba, …}.

Ograniczenia

  • 1 ≤ n ≤ 50
  • osoby są różne; imiona i nazwy miast składają się z liter alfabetu łacińskiego bez polskich znaków i zaczynają się wielką literą

Uwagi

  • slownik.setdefault(klucz, domyslna) zwraca wartość dla klucza, a jeśli klucza jeszcze nie ma — najpierw wstawia domyslna i zwraca ją. Dzięki temu dopisanie osoby do listy miasta to jedna linia:
    ```python
    miasta = {}
    miasta.setdefault("Lublin", []).append("Jan")
    miasta.setdefault("Lublin", []).append("Bartek")
    print(miasta) # {'Lublin': ['Jan', 'Bartek']}
    `
  • Wyrażenie słownikowe (dict comprehension) buduje słownik w jednej linii, podobnie jak wyrażenie listowe buduje listę: {x: x * x for x in range(1, 4)} daje {1: 1, 2: 4, 3: 9}.
  • sorted(slownik) zwraca posortowaną listę kluczy słownika.

Przykład

Wejście
5
Anna Warszawa
Jan Lublin
Ewa Warszawa
Adam Gdynia
Bartek Lublin
Wyjście
Gdynia: Adam
Lublin: Bartek, Jan
Warszawa: Anna, Ewa
{'Gdynia': 1, 'Lublin': 2, 'Warszawa': 2}

Potrzebujesz teorii?

Zasady obowiązujące w rozdziale 17

Zadania w tym rozdziale ćwiczą pracę ze słownikami (dict): tworzenie, dodawanie i usuwanie par, zliczanie wystąpień oraz grupowanie danych według klucza.
Każde zadanie (oraz każdy podpunkt) jest osobnym, niezależnym programem: czyta standardowe wejście (stdin) i wypisuje wynik na standardowe wyjście (stdout).

Konwencje wspólne:

  • Dane wczytuj dokładnie w kolejności podanej w sekcji Wejście; jeśli w jednej linii jest kilka wartości — rozbij ją po spacjach.
  • Jeśli wynikiem jest słownik, wypisz go tak, jak robi to print(slownik) w Pythonie: {klucz: wartość, klucz: wartość} — pary oddzielone przecinkiem i spacją, po dwukropku spacja, klucze i wartości napisowe w apostrofach (np. {'ala': 2, 'ma': 1}), liczby bez apostrofów (np. {1: 1, 2: 4}), pusty słownik to {}.
  • Kolejność par w wypisanym słowniku to kolejność, w jakiej klucze były do niego dodawane (tak zachowuje się słownik w Pythonie).
  • Program nie wypisuje komunikatów typu „Podaj liczbę:”.

Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.

Python uruchomi się w przeglądarce przy pierwszym teście.

Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.

Testy

Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.

Test 1

Nie uruchomiono
Wejście
1
Ola Sopot
Oczekiwane wyjście
Sopot: Ola
{'Sopot': 1}

Test 2

Nie uruchomiono
Wejście
3
Zenon Radom
Ada Radom
Marek Radom
Oczekiwane wyjście
Radom: Ada, Marek, Zenon
{'Radom': 3}

Test 3

Nie uruchomiono
Wejście
4
Kasia Opole
Tomek Kielce
Beata Lublin
Piotr Gdynia
Oczekiwane wyjście
Gdynia: Piotr
Kielce: Tomek
Lublin: Beata
Opole: Kasia
{'Gdynia': 1, 'Kielce': 1, 'Lublin': 1, 'Opole': 1}

Test 4

Nie uruchomiono
Wejście
6
Igor Warszawa
Hanna Gdynia
Grzegorz Warszawa
Filip Gdynia
Ela Warszawa
Darek Sopot
Oczekiwane wyjście
Gdynia: Filip, Hanna
Sopot: Darek
Warszawa: Ela, Grzegorz, Igor
{'Gdynia': 2, 'Sopot': 1, 'Warszawa': 3}
Uruchom z własnymi danymi