मैं स्ट्रिंग में कितने 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]
लेकिन ऐसा क्यों है? यदि मैं सही ढंग से याद करता हूं, तो dict[key]उस शब्दकोश के मूल्य को वापस नहीं करना चाहिए , यह कैसे dict.get(key)काम करता है? मैंने इस धागे को तानाशाह [कुंजी] के बजाय तानाशाही (कुंजी) क्यों देखा है ? लेकिन यह इस विशेष मामले के लिए मेरे सवाल का जवाब नहीं दिया, क्योंकि मुझे पता है कि कार्यक्रम प्राप्त करने के लिए नहीं हैKeyError
मैंने भी कोशिश की है one_groups[x.count('1')].append(x)लेकिन यह भी काम नहीं करता है।
bin(x)[2:].rjust(4, '0')को सरल बनाया जा सकता है '{:0>4b}'.format(x)।
binariesयह सवाल के लिए प्रासंगिक नहीं है, इसलिए आप बस इसका मूल्य प्रदान कर सकते हैं।
getNoneयदि कुंजी मौजूद नहीं है या कोई डिफ़ॉल्ट मान प्रदान नहीं करता है, तो वापस लौटें , जबकि इंडेक्स ऑपरेटर[]कुंजी नहीं होने पर एक त्रुटि उठाता है।