पायथन> = 3.5 विकल्प: सूची शाब्दिक में अनपैक करें [*newdict]
नए अनपैकिंग सामान्यीकरण (PEP 448) पायथन 3.5 के साथ पेश किए गए थे, जिससे आप आसानी से कर सकते हैं:
>>> newdict = {1:0, 2:0, 3:0}
>>> [*newdict]
[1, 2, 3]
किसी भी ऑब्जेक्ट के साथ *
काम करने के साथ अनपैक करना जो कि चलने योग्य है और, चूंकि डिक्शनरी के माध्यम से जब उनकी कुंजी वापस आती है, तो आप आसानी से एक सूची शाब्दिक के भीतर इसका उपयोग करके एक सूची बना सकते हैं।
जोड़ा जा रहा है .keys()
यानी [*newdict.keys()]
अपने इरादे में थोड़ा और अधिक स्पष्ट है, हालांकि यह आप एक समारोह लुक-अप और मंगलाचरण खर्च होंगे बनाने में मदद कर सकता है। (जो, सभी ईमानदारी में, कुछ ऐसा नहीं है जिसके बारे में आपको वास्तव में चिंतित होना चाहिए )।
*iterable
वाक्य रचना कर के समान है list(iterable)
और अपने व्यवहार को शुरू में में प्रलेखित किया गया कॉल अनुभाग अजगर संदर्भ मैनुअल की। पीईपी 448 के साथ जहां *iterable
दिखाई देने पर प्रतिबंध को ढीला कर दिया गया था, उसे सूची, सेट और टुपल शाब्दिकों में भी रखने की अनुमति दी गई थी, अभिव्यक्ति सूचियों पर संदर्भ पुस्तिका को भी इसे अद्यतन करने के लिए अद्यतन किया गया था।
हालांकि list(newdict)
इस अंतर के बराबर है कि यह तेज़ है (कम से कम छोटे शब्दकोशों के लिए) क्योंकि कोई फ़ंक्शन कॉल वास्तव में नहीं किया जाता है:
%timeit [*newdict]
1000000 loops, best of 3: 249 ns per loop
%timeit list(newdict)
1000000 loops, best of 3: 508 ns per loop
%timeit [k for k in newdict]
1000000 loops, best of 3: 574 ns per loop
बड़े शब्दकोशों के साथ गति बहुत अधिक है (एक बड़े संग्रह के माध्यम से पुनरावृति की ओवरहेड एक फ़ंक्शन कॉल की छोटी लागत को ट्रम्प करती है)।
इसी तरह से, आप ट्यूल और डिक्शनरी कीज़ बना सकते हैं:
>>> *newdict,
(1, 2, 3)
>>> {*newdict}
{1, 2, 3}
टपल मामले में अनुगामी अल्पविराम से सावधान रहें!