Temat: List of tuples. Noobskie pytanie.

Witam... kombinuję od godziny jak to rozwiązać i nie jestem w stanie.

cursor.fetchall() w bibliotece sqlite3 zwraca obiekt, który możnaby określić list of tuples. Jeśli wyciągniemy wszystkie wiersze i kolumny z takiej tabeli:


id imie
-----------
1 Tomek
2 Adam


... otrzymamy coś w tym stylu:


[(1, u'Tomek'), (2, u'Adam')]


Stringi na dodatek są w Unicode.

Pytanie brzmi: jak wyciągnąć każdy drugi element takiego "tuple" do jednej listy, w następującym formacie:


['Tomek','Adam']


Domyślam się, że problem jest ewidentnie prosty.

Dzięki za odpowiedzi.Paweł Sopel edytował(a) ten post dnia 20.03.11 o godzinie 01:17

konto usunięte

Temat: List of tuples. Noobskie pytanie.


>>> lista = [(1, u'Tomek'), (2, u'Adam')]
>>> map(lambda e: e[1].encode('utf-8'), lista)
['Tomek', 'Adam']

Gdzie jako argument encode podajesz nazwę docelowego kodowania.

Temat: List of tuples. Noobskie pytanie.

jeżeli lambda Cie przeraża (początkujący mają problem z jej ogranięciem), to może łatwiej będzie zrozumieć Ci strukturę:

>>> lista = [(1, u'Tomek'), (2, u'Adam')]
>>> [ x[1] for x in lista ]

iterujesz po lista i wyciągasz element nr 1 po czym tworzysz nową listę.
lub generator:

>>> ( x[1] for x in lista )

do tego można włączyć enkodowanie:
>>> [ x[1].encode('utf-8') for x in lista ]

powinieneś w programie używać Unicode (Python 2.x), zaś na wejściu i wyjściu enkodować lub dekodować.

Temat: List of tuples. Noobskie pytanie.

Oba rozwiązania działają. Dzięki wielkie!
Bartłomiej Ogryczak

Bartłomiej Ogryczak Backend Developer @
Layar

Temat: List of tuples. Noobskie pytanie.

Tomasz Elendt:

>>> lista = [(1, u'Tomek'), (2, u'Adam')]
>>> map(lambda e: e[1].encode('utf-8'), lista)
['Tomek', 'Adam']

Gdzie jako argument encode podajesz nazwę docelowego kodowania.

Tak już się nie należy pisać od jakichś 7 lat.
http://www.python.org/dev/peps/pep-0290/#replacing-com...

konto usunięte

Temat: List of tuples. Noobskie pytanie.

Bartłomiej Ogryczak:
Tomasz Elendt:

>>> lista = [(1, u'Tomek'), (2, u'Adam')]
>>> map(lambda e: e[1].encode('utf-8'), lista)
['Tomek', 'Adam']

Gdzie jako argument encode podajesz nazwę docelowego kodowania.

Tak już się nie należy pisać od jakichś 7 lat.
http://www.python.org/dev/peps/pep-0290/#replacing-com...

Sprawa dyskusyjna. Np. zdaniem Guido w ogóle najlepiej zamiast map czy filter użyć list comprehension. Ale o tym pewnie wiesz. Podobnie ja wiem do czego służy moduł operator (i wiem, że żeby pobrać drugi element tupli i przekonwertować obiekt unicode do (byte) stringa łatwiej mi było napisać lambdę).Tomasz Elendt edytował(a) ten post dnia 23.03.11 o godzinie 12:52
Bartłomiej Ogryczak

Bartłomiej Ogryczak Backend Developer @
Layar

Temat: List of tuples. Noobskie pytanie.

Tomasz Elendt:
Bartłomiej Ogryczak:
Tomasz Elendt:

>>> lista = [(1, u'Tomek'), (2, u'Adam')]
>>> map(lambda e: e[1].encode('utf-8'), lista)
['Tomek', 'Adam']

Gdzie jako argument encode podajesz nazwę docelowego kodowania.

Tak już się nie należy pisać od jakichś 7 lat.
http://www.python.org/dev/peps/pep-0290/#replacing-com...

Sprawa dyskusyjna. Np. zdaniem Guido w ogóle najlepiej zamiast map czy filter użyć list comprehension.

Dokładnie o tym mówi PEP-290.
Ale o tym pewnie wiesz. Podobnie ja wiem do czego służy moduł operator (i wiem, że żeby pobrać drugi element tupli i przekonwertować obiekt unicode do (byte) stringa łatwiej mi było napisać lambdę).

łatwiej niż to?

[v.encode('utf-8') for (k,v) in lista]?

konto usunięte

Temat: List of tuples. Noobskie pytanie.

Bartłomiej Ogryczak:
Tomasz Elendt:
Bartłomiej Ogryczak:
Tomasz Elendt:
[...]

Tak już się nie należy pisać od jakichś 7 lat.
http://www.python.org/dev/peps/pep-0290/#replacing-com...

Sprawa dyskusyjna. Np. zdaniem Guido w ogóle najlepiej zamiast map czy filter użyć list comprehension.

Dokładnie o tym mówi PEP-290.

O czym? O tym, że to sprawa dyskusyjna (co potwierdzają sformułowania w stylu: "X can replace Y" i "[..]are considered by some[..]"), czy o tym, że preferowane są list comprehensions (o czym w PEP-290 nie ma ani słowa)?
Ale o tym pewnie wiesz. Podobnie ja wiem do czego służy moduł operator (i wiem, że żeby pobrać drugi element tupli i przekonwertować obiekt unicode do (byte) stringa łatwiej mi było napisać lambdę).

łatwiej niż to?

[v.encode('utf-8') for (k,v) in lista]?

Po drugiej w nocy łatwiej.

Ale tak jak Ty to bym pewnie nawet za dnia tego nie napisał. Wolałbym pominąć nawiasy i dodać spację po przecinku (jak radzi PEP-8). I pewnie bym nie wykorzystał tuple unpacking. Znowu - kwestia gustu.

Następna dyskusja:

Pytanie...




Wyślij zaproszenie do