Odwrócenie słownika
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:
- dla każdego miasta (w kolejności alfabetycznej) linię
miasto: osoba1, osoba2, …z osobami posortowanymi alfabetycznie, - w ostatniej linii słownik
{miasto: liczba osób}z miastami w kolejności alfabetycznej, zbudowany wyrażeniem słownikowym i wypisany przezprint(slownik).
Dane wejściowe
- 1. linia:
n - następnie
nlinii: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 wstawiadomyslnai 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
5 Anna Warszawa Jan Lublin Ewa Warszawa Adam Gdynia Bartek Lublin
Gdynia: Adam
Lublin: Bartek, Jan
Warszawa: Anna, Ewa
{'Gdynia': 1, 'Lublin': 2, 'Warszawa': 2}
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.
Przywrócono Twój zapisany kod.
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 uruchomiono1 Ola Sopot
Sopot: Ola
{'Sopot': 1}
Test 2
Nie uruchomiono3 Zenon Radom Ada Radom Marek Radom
Radom: Ada, Marek, Zenon
{'Radom': 3}
Test 3
Nie uruchomiono4 Kasia Opole Tomek Kielce Beata Lublin Piotr Gdynia
Gdynia: Piotr
Kielce: Tomek
Lublin: Beata
Opole: Kasia
{'Gdynia': 1, 'Kielce': 1, 'Lublin': 1, 'Opole': 1}
Test 4
Nie uruchomiono6 Igor Warszawa Hanna Gdynia Grzegorz Warszawa Filip Gdynia Ela Warszawa Darek Sopot
Gdynia: Filip, Hanna
Sopot: Darek
Warszawa: Ela, Grzegorz, Igor
{'Gdynia': 2, 'Sopot': 1, 'Warszawa': 3}