jesteś tutaj
499
Zaawansowana iteracja
Poradź sobie z komplikacjami w sposób
charakterystyczny dla Pythona
{'09:35AM': 'Freeport',
'09:55AM': 'West End',
'10:45AM': 'Treasure Cay',
'11:45AM': 'Rock Sound',
'12:00PM': 'Treasure Cay'
'05:00PM': 'Freeport',
'05:55PM': 'Rock Sound',
'07:00PM': 'West End' }
{'Freeport': ['09:35AM', '05:00PM'],
'Rock Sound': ['11:45AM', '05:55PM'],
'Treasure Cay': ['10:45AM', '12:00PM'],
'West End': ['09:55AM', '07:00PM']}
To jest
słownik fts.
>>> dests = set(fts.values())
>>> print(dests)
{'Freeport', 'West End', 'Rock Sound', 'Treasure Cay'}
Weź wszystkie
wartości ze słownika
fts, a następnie
przekaż je funkcji
wbudowanej set.
Dzięki temu otrzymasz
dane, które Ci
potrzebne.
Oto cztery unikatowe
miejsca docelowe, których
możesz użyć jako kluczy
nowego słownika.
Miejsca docelowe
stają się kluczami.
Po wykonaniu naszych ćwiczeń z komprehencjami poeksperymentujmy w wierszu poleceń powłoki
Pythona, aby dowiedzieć się, co powinno się stać z danymi zapisanymi w słowniku
fts
, żeby został
on przekształcony w wymaganą strukturę danych.
Zanim napiszemy jakikolwiek kod, przyjrzyjmy się pożądanej transformacji. Zwróć uwagą na
to, że klucze nowego słownika (widocznego po prawej stronie) tworzą listę unikatowych miejsc
docelowych wziętych z wartości słownika
fts
(widocznego po lewej stronie).
Okazuje się, że wygenerowanie tych czterech unikatowych miejsc docelowych jest
bardzo proste. Zakładając, że dane pokazane po lewej stronie znajdują się w słowniku
o nazwie
fts
, możesz się odwołać do jego wszystkich wartości za pomocą metody
fts.values
, po czym przekazać je funkcji wbudowanej
set
, aby pozbyć się duplikatów.
Te unikatowe miejsca docelowe przechowajmy w zmiennej o nazwie
dests
.
Teraz, gdy dysponujesz już sposobem umożliwiającym uzyskanie unikatowych miejsc
docelowych, nadszedł czas na wyciągnięcie godzin odlotów związanych z tymi miejscami.
Również te dane znajdują się w słowniku
fts
.
Zanim przejdziesz do kolejnej strony, zastanów się, jak podszedłbyś do zadania polegającego
na wydobyciu godzin odlotów dla każdego unikatowego miejsca docelowego.
W gruncie rzeczy nie musisz się martwić wydobywaniem wszystkich godzin odlotów dla
każdego miejsca docelowego; najpierw wymyśl tylko, jak zrobić to dla miejsca West End.
500
Rozdział 12.
Tylko West End
Wyodrębnij godziny odlotów dla jednego miejsca docelowego
Zacznijmy od wyodrębnienia danych dotyczących godzin odlotów dla jednego miejsca docelowego,
a mianowicie dla miasta
West End. Oto dane, które powinieneś wydobyć.
{'09:35AM': 'Freeport',
'09:55AM': 'West End',
'10:45AM': 'Treasure Cay',
'11:45AM': 'Rock Sound',
'12:00PM': 'Treasure Cay'
'05:00PM': 'Freeport',
'05:55PM': 'Rock Sound',
'07:00PM': 'West End' }
Te klucze powinieneś
przetworzyć w listę
wartości.
Tak jak wcześniej, przejdź do wiersza poleceń powłoki Pythona i zabierz się do roboty.
Mając słownik
fts
, możesz wydobyć godziny odlotów do miasta West End za pomocą
pokazanego poniżej kodu.
>>> wests = []
>>> for k, v in fts.items():
if v == 'West End':
wests.append(k)
>>> print(wests)
['09:55AM', '07:00PM']
Widząc ten kod, powinieneś usłyszeć w swojej głowie dźwięk malutkiego dzwonka
alarmowego, ponieważ ta pętla
for
jest z pewnością doskonałą kandydatką do stania
się komprehencją listy. Zgadza się?
Pętlę tę można przerobić na odpowiadającą jej komprehencję listy w przedstawiony
poniżej sposób.
1. Zacznij od
nowej, pustej listy.
2. Wydobądź wartości
i klucze ze słownika fts.
3. Odfiltruj dane
dotyczące miejsca
docelowego West End.
4. Dołącz do listy
wests godziny odlotów
do miasta West End.
Zadziałało! Oto dane,
których potrzebujesz.
>>> wests2 = [k for k, v in fts.items() if v == 'West End']
>>> print(wests2)
['09:55AM', '07:00PM']
To również zadziałało!
Oto dane, których
potrzebujesz.
To, co było przed chwilą
czterema wierszami kodu,
jest teraz jednym wierszem,
a to dzięki zastosowaniu
komprehencji listy.
Teraz, gdy wiesz już, jak wydobywać odpowiednie dane dla jednego,
konkretnego miejsca docelowego, zróbmy to samo dla wszystkich miejsc.

Get Python Rusz głową! Wydanie II now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.