2014-04-30 7 views
10

समस्यासंलग्न मूल्य शब्दकोश में सभी सूचियों को मान जोड़

मैं निम्नलिखित तरीके से मूल्यों के रूप में खाली सूची के साथ एक शब्दकोश बनाने रहा हूँ।

>>> words = dict.fromkeys(['coach', 'we', 'be'], []) 

शब्दकोश इस तरह दिखता है।

>>> words 
{'coach': [], 'be': [], 'we': []} 

जब मैं एक सूची में मूल्य जोड़ता हूं, तो इस उदाहरण में मूल्य उन सभी के लिए जोड़ा जाता है।

>>> words['coach'].append('test') 
{'coach': ['test'], 'be': ['test'], 'we': ['test']} 

प्रश्न

मेरा प्रश्न के दो भाग हैं। सबसे पहले, यह क्यों हो रहा है? दूसरा, मैं इसके बारे में क्या कर सकता हूं? यही है, मैं केवल एक सूची में मूल्य कैसे जोड़ सकता हूं?

मुझे लगता है कि शब्दकोश बनाने में, मैंने सभी सूचियां एक ही वस्तु को इंगित की हैं। लेकिन मुझे समझ में नहीं आता कि यह कैसे हो सकता है क्योंकि जब मैं 0 को [] के बजाय शब्दकोश निर्माण में इनपुट करता हूं और फिर उन्हें जोड़ने के बजाय मूल्य जोड़ता हूं, तो मान अलग-अलग व्यवहार करते हैं जैसे कि वे अलग-अलग वस्तुओं को इंगित करते हैं।

मैं किसी भी इनपुट की सराहना करता हूं। आपका अग्रिम में ही बहुत धन्यवाद!

उत्तर

18

dict.fromkeys एक mutable सूची इस मामले में सभी मानों के लिए एक ही वस्तु का उपयोग करता है, ... इसका मतलब है कि, सभी कुंजियों का हिस्सा ही खाली सूची ... आप एक सूची के मूल्य के .append करने का प्रयास करते , ऑब्जेक्ट में परिवर्तन किए जाते हैं, इसलिए इसमें परिवर्तन सभी संदर्भित होते हैं। {k:[] for k in ['could', 'we', 'be']} प्रत्येक [] एक विभिन्न रिक्त सूची है और इसलिए प्रत्येक कुंजी मान और काम के लिए अद्वितीय अपेक्षा के अनुरूप होगा:

इसके बजाय यदि आपने dict कंप्यूटर अनुप्रयोग, जैसे इस्तेमाल किया।

संबंध dict.fromkeys(['a', 'b', 'c'], 0) का उपयोग करने के 0 एक अपरिवर्तनीय वस्तु इस प्रकार है कि पकड़ लिया के रूप में यह करने के लिए परिवर्तन नई वस्तुओं में परिणाम के अधीन नहीं है है, अंतर्निहित वस्तु में कोई परिवर्तन नहीं है जो अलग-अलग नाम (इस मामले में - विभिन्न चाबियों के मूल्य) साझा कर सकते हैं।

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