2013-06-14 27 views
6

Powiedzmy mam listę słowników, które mają nazwy i grup wiekowych i innych informacji, tak jak poniżej:Python Dostęp do wartości na liście słowników

thisismylist= [ 
       {'Name': 'Albert' , 'Age': 16}, 
       {'Name': 'Suzy', 'Age': 17}, 
       {'Name': 'Johnny', 'Age': 13} 
] 

Jak bym go o druku następujące pomocą pętli for:

Albert 
Suzy 
Johnny 

ja po prostu nie mogę owinąć głowę wokół tej idei ...

Odpowiedz

3

Wygląda na to trzeba przejść przez Python flow-control documentation. Po prostu zapętlasz wszystkie pozycje na liście, a następnie dla każdego z tych elementów (słowniki, w tym przypadku) możesz uzyskać dostęp do dowolnych wartości. Poniższy kod, na przykład, wydrukuje każdą wartość w każdym słowniku na liście.

for d in my_list: 
    for key in d: 
     print d[key] 

Należy zauważyć, że to nie drukuje klawiszy, tylko wartości. Aby wydrukować również klucze, należy wydrukować oświadczenie print key, d[key]. Tak proste!

Ale tak na prawdę przejrzyj dokumentację kontroli przepływu; to bardzo miłe.

12

Jeśli jesteś po prostu patrząc na wartościach związanych z „name”, kod powinien wyglądać następująco:

for d in thisismylist: 
    print d['Name'] 
0

Można wystawać na zewnątrz atrybut każdego elementu na liście Name i przyłączyć się do wyników z nowymi liniami :

>>> print '\n'.join(x['Name'] for x in thisismylist) 
Albert 
Suzy 
Johnny 

Edit

zajęło mi kilka minut, ale przypomniałem sobie o w ciekawy sposób to zrobić. Można również użyć kombinacji itertools i modułu operator. Możesz see it on repl.it too.

>>> from itertools import imap 
>>> from operator import itemgetter 
>>> print '\n'.join(imap(itemgetter('Name'), thisismylist)) 
Albert 
Suzy 
Johnny 

W każdym razie, jesteś zapewne lepiej wyłączyć za pomocą wanilia for pętlę, ale pomyślałem, że niektóre inne opcje były w porządku.

5

Jeśli chcesz listę tych wartości:

>>> [d['Name'] for d in thisismylist] 
['Albert', 'Suzy', 'Johnny'] 

sam sposób można uzyskać krotka danych:

>>> [(d['Name'],d['Age']) for d in thisismylist] 
[('Albert', 16), ('Suzy', 17), ('Johnny', 13)] 

Albo włączyć listę dicts w jednym kluczu , słownik para wartości:

>>> {d['Name']:d['Age'] for d in thisismylist} 
{'Johnny': 13, 'Albert': 16, 'Suzy': 17} 

Więc sama metoda, sposób, aby je wydrukować:

>>> print '\n'.join(d['Name'] for d in thisismylist) 
Albert 
Suzy 
Johnny 

I można wydrukować załatwiania jeśli chcesz:

>>> print '\n'.join(sorted(d['Name'] for d in thisismylist)) 
Albert 
Johnny 
Suzy 

też sortować według ich wieku, gdy spłaszczenie listę:

>>> for name, age in sorted([(d['Name'],d['Age']) for d in thisismylist],key=lambda t:t[1]): 
... print '{}: {}'.format(name,age) 
... 
Johnny: 13 
Albert: 16 
Suzy: 17 
0

skrótowym sposób to zrobić bez importowania biblioteki :

print('\n'.join([e["Name"] for e in thisismylist])) 
1

Poniższy kod powinien działać idealnie.

for var in thisismylist: 
    print var['Name'] 
Powiązane problemy