W tym ćwiczeniu odtworzymy działanie funkcji array_column znanej z PHP w Pythonie, na trzy sposoby:
- używając pętli foreach
- używając metody map
- używając składania list (list comprehension)
Funkcja array_column występuje w języku PHP i pozwala nam działać na listach zawierających w sobie zagnieżdżone słowniki i niejako wyciągać z nich listę określonych kluczy.
Coś takiego napiszemy sobie w Pythonie. Abyśmy się dobrze zrozumieli, oto nasza przykładowa lista:
people = [
{
"name": "John",
"age" : 30
},
{
"name": "Jane",
"age": 20
},
{
"name": "Bob",
"age": 24
},
]
Nasza funkcja ma przyjąć listę oraz klucz jako argument i zwrócić nam listę np. imion albo wartości age w tym przypadku.
Sposób 1 – pętla
def array_column(arr, column):
output = []
for record in arr:
key = record.get(column);
if key:
output.append(key)
return output
print(array_column(people, 'age'))
# [30, 20, 24]
print(array_column(people, 'name'))
# ['John', 'Jane', 'Bob']
Jak widać – tworzymy nową zmienną output, pusta lista. Lecimy po każdym rekordzie (słowniku w tej liście) i wyciągamy z niego wartość klucza, którego szukamy.
Następnie dodajemy ten klucz do output, zwracamy output, funkcja array_column działa (dokładnie jak w języku PHP).
Sposób 2 – metoda map
def array_column(arr, column):
output = map(lambda x: x[column], arr)
return list(output)
print(array_column(people, 'age'))
# [30, 20, 24]
print(array_column(people, 'name'))
# ['John', 'Jane', 'Bob']
Przy pomocy metody map przechodzimy po każdym słowniku, pokazując za pomocą funkcji lambda jak te słowniki chcemy „obrobić” – w tym wypadku, chcemy wziąć obiekt (zmienna x) i zwrócić wartość szukanej kolumny tego obiektu.
Całość jeszcze musimy opakować w „list()”, aby obiekt map zamienić na listę.
Sposób 3 – list comprehension
def array_column(arr, column):
return [x[column] for x in arr]
print(array_column(people, 'age'))
# [30, 20, 24]
print(array_column(people, 'name'))
# ['John', 'Jane', 'Bob']
Tutaj mamy list comprehension. Dla każdego słownika w arr bierzemy wartość szukanej kolumny tego słownika i wrzucamy do listy.
Najbardziej „pythonowe” podejście to właśnie list comprehension.