2010-11-23 13 views
12

मुझे पाइथन में ऑब्जेक्ट्स की एक सूची मिली है, और उनमें से प्रत्येक के पास id संपत्ति है। मैं उन आईडी की एक सूची प्राप्त करना चाहता हूं।पाइथन सी # के बराबर है। चयन करें?

सी # में मैं लिखना चाहता हूँ

myObjects.Select(obj => obj.id); 

मैं कैसे पायथन में यह करना होगा? पर "सूची बूझ" यहाँ अनुभाग की

उत्तर

10
[obj.id for obj in myObjects] 
: http://docs.python.org/tutorial/datastructures.html आपके प्रारंभ सूची original_list कहा जाता है और अपनी नई सूची id_list कहा जाता है

हैं, तो आप कुछ इस तरह कर सकता है

+0

सही .. सूची comprehensions। उन लोगों के बारे में भूल गए :) – mpen

17

की जांच:

id_list = [x.id for x in original_list] 
6

यदि यह एक बड़ी सूची है और आपको केवल एक बार आईडी को संसाधित करने की आवश्यकता है तो जनरेटर अभिव्यक्ति भी होती है।

ids = (obj.id for obj in my_objects) 

for id in ids: 
    do_something(id) 

एक जनरेटर अभिव्यक्ति रैंडम एक्सेस का समर्थन नहीं करता, लेकिन आप मांग पर प्रत्येक आईडी मिल जाएगा और इसलिए सभी को एक बार एक सूची निर्माण से बचा जाता है। जनरेटर अभिव्यक्ति xrange है क्योंकि सूची की समझ range है।

जनरेटर अभिव्यक्तियों के साथ एक और चेतावनी यह है कि इसे केवल तब तक एक्सेस किया जा सकता है जब तक कि इसमें कोई संसाधन अभी भी खुला न हो। उदाहरण के लिए, निम्न कोड विफल हो जाएगा।

with open(filename) as f: 
    lines = (line for line in f) 

# f is now closed 
for line in lines: 
    print line 

बराबर सूची समझ इस मामले में काम करेगा। उनके सही मन में

1

कोई भी इस निम्नलिखित तरीके से करना होगा, लेकिन यहाँ यह है के मामले में यह काम में एक अधिक जटिल उदाहरण

import operator 
map(operator.attrgetter("id"), myObjects) 
2

में आता है कि आप में से सी # एक सीधा बराबर अजगर में चयन चाहते हैं, किसी तृतीय-पक्ष लाइब्रेरी का उपयोग करने की लागत पर, आप asq पैकेज का उपयोग कर सकते हैं जो कि LINQ-for-ऑब्जेक्ट्स को पाइथन इटेबल्स पर प्रेरित कार्यान्वयन प्रदान करता है। अपने प्रश्न में सी # कोड ASQ का उपयोग हो जाएगा:

from asq.initiators import query 
query(myObjects).select(lambda obj: obj.id) 

या, ASQ की एक अन्य विशेषता के साथ संयुक्त:

from asq.selectors import a_ 
query(myObjects).select(a_("id")) 
संबंधित मुद्दे