2013-06-14 20 views
6

Say I eine Liste der Wörterbücher, die Namen und das Alter und andere Informationen haben, etwa so:Python Zugriff auf Werte in einer Liste der Wörterbücher

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

Wie würde ich über Druck gehen folgende einer for-Schleife:

Albert 
Suzy 
Johnny 

ich kann nicht meinen Kopf nur wickeln um diese Idee ...

Antwort

3

Sieht aus wie Sie über die Python flow-control documentation gehen müssen. Im Grunde werden Sie einfach alle Elemente in Ihrer Liste durchlaufen, und dann können Sie für jedes dieser Elemente (in diesem Fall Wörterbücher) auf die gewünschten Werte zugreifen. Der folgende Code wird beispielsweise jeden Wert in jedem Wörterbuch innerhalb der Liste ausgeben.

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

Beachten Sie, dass dies nicht die Schlüssel, nur die Werte gedruckt werden. Um auch die Schlüssel zu drucken, geben Sie Ihre Druckanweisung print key, d[key] ein. So einfach!

Aber wirklich, lesen Sie die Flow-Control-Dokumentation; es ist sehr nett.

12

Wenn Sie nur für Werte im Zusammenhang mit ‚Name‘ suchen, sollten Sie den Code wie folgt aussehen:

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

Sie das Name Attribut in der Liste aus jedem Element projizieren könnte und kommen Sie mit den Ergebnissen mit Zeilenumbrüchen :

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

bearbeiten

Es dauerte ein paar Minuten, aber ich erinnerte sich an die o Eine interessante Möglichkeit, dies zu tun. Sie können dazu auch eine Kombination aus itertools und operator verwenden. Sie können see it on repl.it too.

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

In jedem Fall sind Sie wahrscheinlich besser dran mit einem Vanille for Schleife, aber ich dachte, dass einige andere Optionen, um waren.

5

Wenn Sie eine Liste dieser Werte:

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

gleiche Methode, Sie ein Tupel der Daten erhalten können:

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

Oder schalten Sie die Liste der dicts in einem einzigen Schlüssel Wörterbuch, Wertepaar:

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

So gleiche Methode, ein Weg, um sie zu drucken:

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

Und Sie können es ausdrucken sortiert, wenn Sie möchten:

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

Oder, sortiert nach ihrem Alter, während die Liste Abflachung:

>>> 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

eine Abkürzung Weg, dies zu tun, ohne Bibliotheken zu importieren :

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

Der folgende Code sollte perfekt funktionieren.

for var in thisismylist: 
    print var['Name'] 
Verwandte Themen