2012-02-05 28 views
19

मेरे पास एक सूची है - मेरा सूची - जहां प्रत्येक तत्व एक शब्दकोश है। मैं इस सूची में पुन: प्रयास करना चाहता हूं लेकिन मैं प्रत्येक विशेषता में प्रत्येक विशेषता में - 'आयु' - केवल एक विशेषता में दिलचस्प हूं। मैं पुनरावृत्तियों की संख्या की गिनती रखने में भी रूचि रखता हूं।शब्दकोशों की सूची में इटरेटिंग

मुझे क्या करना:

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

लेकिन सोच रहा था कि वहाँ कुछ अधिक pythonic है। कोई सुझाव?

+1

की सूची क्या आप इसके साथ क्या करना चाहते हैं पर निर्भर करता है। अगर आप इसे करना चाहते हैं तो इसे प्रिंट करें, यह ठीक है। यदि आप उम्र के कुछ कार्य (अधिकतम कहें) के साथ एक नई सूची बनाना चाहते हैं, तो आप एक listcomp या genexp का उपयोग कर सकते हैं। लेकिन अगर आप प्रविष्टि ['आयु'] पर बहुत सारी शाखाएं करना चाहते हैं, तो लूप के साथ चिपके रहें। [और आप अर्धविराम छोड़ सकते हैं ..] – DSM

उत्तर

22

आप के लिए एक जनरेटर इस्तेमाल कर सकते हैं केवल उम्र पकड़ो।

# 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 

और, हाँ, अर्धविराम का उपयोग न करें।

4

प्रिंटिंग के लिए, शायद आप जो कर रहे हैं वह ठीक है।

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

पंक्तियों के अंत में अर्धविराम अजगर में आवश्यक नहीं हैं (हालांकि आप उन्हें इस्तेमाल कर सकते हैं अगर आप पर कई बयान रखना चाहते हैं: लेकिन अगर आप मान संग्रहीत करना चाहते हैं, आप एक सूची समझ इस्तेमाल कर सकते हैं एक ही पंक्ति)। तो यह उन्हें छोड़ने के लिए और अधिक pythonic होगा।

लेकिन वास्तविक पुनरावृत्ति रणनीति का पालन करना आसान है और आप जो कर रहे हैं उसके बारे में काफी स्पष्ट है। अन्य इसे करने के तरीके हैं। लेकिन एक स्पष्ट फॉर-लूप पूरी तरह से पाइथनिक है।

(निकलस बी के जवाब से काम नहीं चलेगा ठीक क्या आप कर रहे हैं: यदि आप ऐसा ही कुछ करना चाहते हैं, प्रारूप स्ट्रिंग "{0}\n{1}" होना चाहिए।)

14

बहुत आसान तरीका, शब्दकोश पुनरावृति

>>> 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] 
संबंधित मुद्दे