python - तानाशाह(कुंजी) काम क्यों नहीं किया लेकिन तानाशाही[कुंजी] नहीं?




dictionary (2)

यह fromkeys की fromkeys विधि पर मदद है।

अंतर्निहित फ़ंक्शन से सहायता मिलती है:

fromkeys (चलने योग्य, मान = कोई नहीं, /) बिल्टइन की विधि। उदाहरण उदाहरण चलने योग्य से कुंजियों और मान पर सेट मानों के साथ एक नया शब्दकोश बनाएं

यह कहता है कि गदहे एक मूल्य को स्वीकार करेंगे, और यहां तक ​​कि यह एक कॉल करने योग्य है, यह पहले इसका मूल्यांकन करेगा, और फिर सभी प्रमुख कुंजियों को उस मान को असाइन करेगा।

पाइथन में सूचियाँ उत्परिवर्तित होती हैं, और इसलिए यह एक ही खाली सूची संदर्भ प्रदान करेगा और एक परिवर्तन उन सभी को प्रभावित करेगा।

इसके बजाय डिफ़ॉल्ट निर्णय का उपयोग करें:

>>> from collections import defaultdict
>>> one_groups = defaultdict(list)
>>> for x in binaries:
      one_groups[x.count('1')] += [x]
>>> one_groups = dict(one_groups) # to stop default dict behavior

यह गैर-मौजूदा कुंजी को असाइनमेंट स्वीकार करेगा और मान खाली सूचियों (इस मामले में) के लिए डिफ़ॉल्ट होगा।

मैं स्ट्रिंग में कितने 1 के आधार पर कुछ संख्याओं के बाइनरी स्ट्रिंग्स को एक साथ समूहित करने की कोशिश कर रहा हूं।

यह काम नहीं करता है:

s = "0 1 3 7 8 9 11 15"
numbers = map(int, s.split())
binaries = [bin(x)[2:].rjust(4, '0') for x in numbers]

one_groups = dict.fromkeys(range(5), [])
for x in binaries:
    one_groups[x.count('1')] += [x]

अपेक्षित शब्दकोश one_groups होना चाहिए

{0: ['0000'], 
 1: ['0001', '1000'], 
 2: ['0011', '1001'], 
 3: ['0111', '1011'], 
 4: ['1111']}

लेकिन मुझे मिलता है

{0: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'], 
 1: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'], 
 2: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'], 
 3: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111'], 
 4: ['0000', '0001', '0011', '0111', '1000', '1001', '1011', '1111']}

अब तक जो एकमात्र काम किया है वह यह है कि अगर मैं one_groups[x.count('1')] = one_groups.get(x.count('1')) + [x] उपयोग one_groups[x.count('1')] += [x] one_groups[x.count('1')] = one_groups.get(x.count('1')) + [x] बजाय करता हूँ one_groups[x.count('1')] += [x]

लेकिन ऐसा क्यों है? अगर मैं सही ढंग से याद करता हूं, तो dict.get(key) नहीं है dict[key] उस शब्दकोश के मूल्य को वापस करने के लिए माना जाता है, dict.get(key) समान कैसे काम करता है? मैंने इस धागे को तानाशाह [कुंजी] के बजाय तानाशाही (कुंजी) क्यों देखा है ? लेकिन यह इस विशेष मामले के लिए मेरे सवाल का जवाब नहीं दिया, क्योंकि मुझे पता है कि कार्यक्रम KeyError प्राप्त करने के लिए नहीं है

मैंने one_groups[x.count('1')].append(x) की भी कोशिश की है one_groups[x.count('1')].append(x) लेकिन यह भी काम नहीं करता है।


समस्या one_groups = dict.fromkeys(range(5), [])

(यह सभी कुंजियों के मान के समान सूची पास करता है। इसलिए यदि आप एक मान को बदलते हैं, तो आप उन सभी को बदल देते हैं)

आप इसके बजाय इसका उपयोग कर सकते हैं: one_groups = {i:[] for i in range(5)}

(यह बात हर कुंजी के लिए "निष्पादित" [] (जो सूची के बराबर होती है) (इस प्रकार विभिन्न सूचियों के साथ मान बना रही है)







dictionary