2012-02-05 29 views
19

Her öğenin bir sözlük olduğu --myList listesi var. Bu listeyi tekrarlamak istiyorum ancak her seferinde her sözlükte sadece bir özellik olan 'yaş' - ilginç. Aynı zamanda iterasyonların sayısını saymakla da ilgileniyorum. bir şey daha pythonic varSözlükler listesi üzerinde yineleme

for i, entry in enumerate(myList): 
    print i; 
    print entry['age']; 

Ama merak ediyorum:

yapmam. Herhangi bir ipucu?

+1

listesi onunla ne yapmak istediğinize bağlı. Tek yapmanız gereken yazdırmaksa, bu iyi. Eğer bir yaş işleviyle yeni bir liste yapmak istiyorsanız (maksimum), bir listcomp veya genexp kullanabilirsiniz. Ancak, ['yaş'] girişinde çok fazla dallanma yapmak istiyorsanız, for döngüsüne bağlı kalın. [Ve noktalı virgülleri atlayabilirsiniz ..] – DSM

cevap

22

Sen bir jeneratör kullanabilirsiniz sadece yaşları kapmak.

# Get a dictionary 
myList = [{'age':x} for x in range(1,10)] 

# Enumerate ages 
for i, age in enumerate(d['age'] for d in myList): 
    print i,age 

Ve, evet, noktalı virgül kullanmayın.

4

Yazdırmak için muhtemelen yaptığınız şey hemen doğru.

>>> d_list = [dict((('age', x), ('foo', 1))) for x in range(10)] 
>>> d_list 
[{'age': 0, 'foo': 1}, {'age': 1, 'foo': 1}, {'age': 2, 'foo': 1}, {'age': 3, 'foo': 1}, {'age': 4, 'foo': 1}, {'age': 5, 'foo': 1}, {'age': 6, 'foo': 1}, {'age': 7, 'foo': 1}, {'age': 8, 'foo': 1}, {'age': 9, 'foo': 1}] 
>>> ages = [d['age'] for d in d_list] 
>>> ages 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> len(ages) 
10 
2

satırlarının sonunda noktalı virgül (eğer birden fazla ifadeleri koymak istiyorsanız bunları kullanabilirsiniz rağmen Python gerekli değildir: Eğer değerleri saklamak istediğiniz Ama eğer bir liste anlama kullanabilirsiniz aynı satır). Yani onları ihmal etmek daha pythonic olurdu.

Ancak, gerçek yineleme stratejisini takip etmek kolay ve ne yaptığınız hakkında oldukça açık. Bunu yapmak için diğer yol vardır. Ama açık bir for-loop mükemmel bir pythonic.

(yapmayacağım Niklas B.'nin cevabı tam ne yaptığınızı: Eğer böyle bir şey yapmak istiyorsanız, biçim dizesi "{0}\n{1}" olmalıdır.)

14

Çok basit bir yolu, sözlük yinelemek

>>> my_list 
[{'age': 0, 'name': 'A'}, {'age': 1, 'name': 'B'}, {'age': 2, 'name': 'C'}, {'age': 3, 'name': 'D'}, {'age': 4, 'name': 'E'}, {'age': 5, 'name': 'F'}] 

>>> ages = [li['age'] for li in my_list] 

>>> ages 
[0, 1, 2, 3, 4, 5] 
İlgili konular