2013-12-10 12 views
8

में मैं Python2.7 और Python 3+ में dict comprehensions के बारे में निम्नलिखित ढेर अतिप्रवाह पोस्ट पाया: Create a dictionary with list comprehension in Python करते हुए कहा कि मैं इस तरह comprehensions शब्दकोश आवेदन कर सकते हैं:शब्दकोश समझ अजगर 3

d = {key: value for (key, value) in sequence} 

मैं पायथन 3. में इसे करने की कोशिश हालांकि, यह एक अपवाद उठाता है।

d = {'a':1, 'b':2, 'c':3, 'd':4} 
{key : value for (key, value) in d} 
{key : value for key, value in d} 

दोनों संस्करणों कि ValueError: need more than 1 value to unpack कह एक ValueError बढ़ा।

पायथन 3 में शब्दकोश समझने का सबसे आसान/सबसे सीधा तरीका क्या है?

+2

वह धक्का समझ कुंजी-मूल्य जोड़े के अनुक्रम की अपेक्षा करता है। आप इसे एक ताना खिला रहे हैं, जो कुंजी-मूल्य जोड़े का अनुक्रम नहीं है। – user2357112

उत्तर

13

एक शब्दकोश पर लूपिंग केवल कुंजी उत्पन्न करता है। दोनों कुंजी और मूल्यों से अधिक पाश को d.items() का उपयोग करें:

{key: value for key, value in d.items()} 

ValueError अपवाद जैसा कि आप देख नहीं एक dict समझ समस्या है, न ही यह अजगर 3 तक सीमित है; आप अजगर 2 में या एक नियमित रूप से for पाश के साथ एक ही समस्या देखना चाहते हैं: प्रत्येक यात्रा केवल एक आइटम झुकेंगे किया जा रहा है

>>> d = {'a':1, 'b':2, 'c':3, 'd':4} 
>>> for key, value in d: 
...  print key, value 
... 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: need more than 1 value to unpack 

क्योंकि।

एक परिवर्तन के बिना, {k: v for k, v in d.items()} सिर्फ एक वर्बोज़ और महंगा d.copy() है; जब आप चाबियाँ या मानों के साथ थोड़ा अधिक करते हैं, या शर्तों का उपयोग करते हैं या अधिक जटिल लूप निर्माण करते हैं तो केवल एक तभी समझ का उपयोग करें।

1

खैर ऊपर कहा - आप python3 में आइटम ड्रॉप कर सकते हैं यदि आप इसे इस तरह से कार्य करें:

d = {'a':1, 'b':2, 'c':3, 'd':4} 
z = {x: d[x] for x in d} 
z 
>>>{'a': 1, 'b': 2, 'c': 3, 'd': 4} 

और इस: {घ में कुंजी के लिए डी [कुंजी] कुंजी}

शर्तों का उपयोग करने की क्षमता के साथ-साथ

y = {x: d[x] for x in d if d[x] > 1} 
y 
>>>{'b': 2, 'c': 3, 'd': 4} 

आनंद लें!

संबंधित मुद्दे