मुझे पायथन लिस्ट कॉम्प्रिहेंशन सिंटैक्स पसंद है।
क्या इसका इस्तेमाल शब्दकोशों बनाने के लिए भी किया जा सकता है? उदाहरण के लिए, कुंजियों और मानों के जोड़े पर पुनरावृति करके:
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
मुझे पायथन लिस्ट कॉम्प्रिहेंशन सिंटैक्स पसंद है।
क्या इसका इस्तेमाल शब्दकोशों बनाने के लिए भी किया जा सकता है? उदाहरण के लिए, कुंजियों और मानों के जोड़े पर पुनरावृति करके:
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
जवाबों:
पायथन 2.7 और 3 के बाद से, आपको बस संक्षिप्त समझ वाक्यविन्यास का उपयोग करना चाहिए :
{key: value for (key, value) in iterable}
पायथन 2.6 और उससे पहले के dict
बिल्ट-इन में कुंजी / मूल्य जोड़े का एक पुनरावृत्ति प्राप्त हो सकता है, इसलिए आप इसे एक सूची समझ या जनरेटर अभिव्यक्ति पास कर सकते हैं। उदाहरण के लिए:
dict((key, func(key)) for key in keys)
हालाँकि, यदि आपके पास पहले से ही कुंजियाँ और / या वैल की चलने-फिरने की क्षमता है, तो आपको बिल्कुल भी समझ की ज़रूरत नहीं है - यह सबसे आसान है, dict
बिल्ट-इन सीधे कॉल :
# consumed from any iterable yielding pairs of keys/vals
dict(pairs)
# "zipped" from two separate iterables of keys/vals
dict(zip(list_of_keys, list_of_values))
पायथन 3 और पायथन 2.7+ में, शब्दकोश की समझ नीचे दी गई है:
d = {k:v for k, v in iterable}
पायथन 2.6 या उससे पहले के लिए, फोरट्रान का जवाब देखें ।
वास्तव में, यदि आपको पहले से ही किसी प्रकार के मानचित्रण की आवश्यकता है, तो इसे चलने योग्य से अधिक पुनरावृति की आवश्यकता नहीं है।
>>> ts = [(1, 2), (3, 4), (5, 6)]
>>> dict(ts)
{1: 2, 3: 4, 5: 6}
>>> gen = ((i, i+1) for i in range(1, 6, 2))
>>> gen
<generator object <genexpr> at 0xb7201c5c>
>>> dict(gen)
{1: 2, 3: 4, 5: 6}
पायथन 2.7 में, यह इस प्रकार है:
>>> list1, list2 = ['a', 'b', 'c'], [1,2,3]
>>> dict( zip( list1, list2))
{'a': 1, 'c': 3, 'b': 2}
उन्हें जिप !
पायथन में सूची समझ के साथ एक शब्दकोश बनाएं
मुझे पायथन लिस्ट कॉम्प्रिहेंशन सिंटैक्स पसंद है।
क्या इसका इस्तेमाल शब्दकोशों बनाने के लिए भी किया जा सकता है? उदाहरण के लिए, कुंजियों और मानों के जोड़े पर पुनरावृति करके:
mydict = {(k,v) for (k,v) in blah blah blah}
आप वाक्यांश "तानाशाह समझ" की तलाश कर रहे हैं - यह वास्तव में है:
mydict = {k: v for k, v in iterable}
मान blah blah blah
लेना दो-टुपल्स का एक चलना है - आप इतने करीब हैं। आइए कुछ "ब्लाह" बनाएं जैसे:
blahs = [('blah0', 'blah'), ('blah1', 'blah'), ('blah2', 'blah'), ('blah3', 'blah')]
अब यहाँ सिंटेक्स मैपिंग भाग है। क्या यह एक dict
समझ के बजाय एक समझ बनाता है set
(जो कि आपका छद्म कोड सन्निकट है) बृहदान्त्र है, :
जैसे:
mydict = {k: v for k, v in blahs}
और हम देखते हैं कि यह काम किया है, और अजगर के 3.7 के रूप में प्रविष्टि क्रम बनाए रखना चाहिए:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah2': 'blah', 'blah3': 'blah'}
पायथन 2 में और 3.6 तक, ऑर्डर की गारंटी नहीं थी:
>>> mydict
{'blah0': 'blah', 'blah1': 'blah', 'blah3': 'blah', 'blah2': 'blah'}
सभी समझ में एक मैपिंग घटक और एक फ़िल्टरिंग घटक है जो आप मनमाने ढंग से अभिव्यक्ति प्रदान कर सकते हैं।
तो आप अंत में एक फ़िल्टर भाग जोड़ सकते हैं:
>>> mydict = {k: v for k, v in blahs if not int(k[-1]) % 2}
>>> mydict
{'blah0': 'blah', 'blah2': 'blah'}
यहां हम केवल इस बात के लिए परीक्षण कर रहे हैं कि क्या कुंजी और मानों को मैप करने से पहले डेटा को फ़िल्टर करने के लिए अंतिम वर्ण 2 से विभाज्य है।
पायथन संस्करण <2.7 (आरआईपी, 3 जुलाई 2010 - 31 दिसंबर 2019) , नीचे करें:
d = dict((i,True) for i in [1,2,3])
पायथन संस्करण> = 2.7, नीचे करें:
d = {i: True for i in [1,2,3]}
डिक्शनरी कॉम्प्रिहेंशन का उपयोग करते हुए शब्दकोश निर्माण का एक और उदाहरण है:
मैं यहाँ क्या करने के लिए ट्रिंग कर रहा हूँ एक वर्णमाला शब्दकोश बनाने के लिए जहां प्रत्येक जोड़ी; अंग्रेजी अक्षर और अंग्रेजी वर्णमाला में इसकी संबंधित स्थिति है
>>> import string
>>> dict1 = {value: (int(key) + 1) for key, value in
enumerate(list(string.ascii_lowercase))}
>>> dict1
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4, 'g': 7, 'f': 6, 'i': 9, 'h': 8,
'k': 11, 'j': 10, 'm': 13, 'l': 12, 'o': 15, 'n': 14, 'q': 17, 'p': 16, 's':
19, 'r': 18, 'u': 21, 't': 20, 'w': 23, 'v': 22, 'y': 25, 'x': 24, 'z': 26}
>>>
सूची में अल्फाबेट्स और उनके अनुक्रमों की सूची प्राप्त करने के लिए यहां एन्यूमरेट के उपयोग की सूचना दें और शब्दकोश के लिए प्रमुख मूल्य युग्म उत्पन्न करने के लिए अक्षर और सूचकांकों की अदला-बदली करें।
आशा है कि यह आपके लिए शब्दकोश का एक अच्छा विचार देता है और आपको अपने कोड को कॉम्पैक्ट बनाने के लिए इसे अधिक बार उपयोग करने के लिए प्रोत्साहित करता है
d = {k: v+1 for v, k in enumerate(string.ascii_lowercase)}
इसे इस्तेमाल करे,
def get_dic_from_two_lists(keys, values):
return { keys[i] : values[i] for i in range(len(keys)) }
मान लें कि हमारे पास दो सूचियाँ हैं देश और राजधानी
country = ['India', 'Pakistan', 'China']
capital = ['New Delhi', 'Islamabad', 'Beijing']
फिर दो सूचियों से शब्दकोश बनाएं:
print get_dic_from_two_lists(country, capital)
आउटपुट इस तरह है,
{'Pakistan': 'Islamabad', 'China': 'Beijing', 'India': 'New Delhi'}
>>> {k: v**3 for (k, v) in zip(string.ascii_lowercase, range(26))}
पायथन तानाशाह की समझ का समर्थन करता है, जो आपको इसी तरह संक्षिप्त वाक्य रचना का उपयोग करके रनटाइम पर शब्दकोशों के निर्माण को व्यक्त करने की अनुमति देता है।
एक शब्दकोश समझ के रूप में {key: value for (key, value) iterable} लेता है। इस सिंटैक्स को पायथन 3 में पेश किया गया था और जहाँ तक इसे पायथन 2.7 के रूप में देखा गया है, इसलिए आपको इसका उपयोग करने में सक्षम होना चाहिए, भले ही आपने पायथन के किस संस्करण को स्थापित किया हो।
एक विहित उदाहरण दो सूचियों को ले रहा है और एक शब्दकोश बना रहा है जहां पहली सूची में प्रत्येक स्थिति में आइटम एक कुंजी बन जाता है और दूसरी सूची में संबंधित स्थान पर आइटम मूल्य बन जाता है।
इस समझ के अंदर उपयोग किया गया ज़िप फ़ंक्शन ट्यूपल्स का एक पुनरावर्तक देता है, जहां ट्यूपल में प्रत्येक तत्व प्रत्येक इनपुट पुनरावृत्तियों में एक ही स्थिति से लिया जाता है। ऊपर दिए गए उदाहरण में, दिए गए पुनरावृत्ति में टुपल्स ("ए", 1), ("बी", 2), आदि शामिल हैं।
आउटपुट:
{{मैं ’: ५१२, 'ई’: ६४,: ओ ’: २'४४,: एच’: ३४३, 31 एल ’: १३३१,' एस’: 5832, 'बी ’: 1,, डब्ल्यू’: 10648, ’ c ': 8,' x ': 12167,' y ': 13824,' t ': 6859,' p ': 3375,' d ': 27,' j ': 729,' a ': 0,' z ' : 15625, 'f': 125, 'q': 4096, 'u': 8000, 'n': 2197, 'm': 1728, 'r': 4913, 'k': 1000, 'g': 216 , 'v': 9261}
यह कोड विभिन्न मूल्यों के साथ कई सूचियों के लिए सूची बोध का उपयोग करके शब्दकोश बनाएगा जिसका उपयोग किया जा सकता है pd.DataFrame()
#Multiple lists
model=['A', 'B', 'C', 'D']
launched=[1983,1984,1984,1984]
discontinued=[1986, 1985, 1984, 1986]
#Dictionary with list comprehension
keys=['model','launched','discontinued']
vals=[model, launched,discontinued]
data = {key:vals[n] for n, key in enumerate(keys)}
enumerate
अपनी सूची के साथ प्रत्येक मैच के n
लिए पास होगाvals
key
आप प्रत्येक जोड़ी के लिए एक नया तानाशाह बना सकते हैं और इसे पिछले ताना के साथ मिला सकते हैं:
reduce(lambda p, q: {**p, **{q[0]: q[1]}}, bla bla bla, {})
जाहिर है कि इस दृष्टिकोण की आवश्यकता reduce
है functools
।
collections.Counter
चीजों की गिनती के लिए एक विशेष प्रकार का