আমি স্ট্রিংয়ের মধ্যে কতজন রয়েছে তার উপর ভিত্তি করে নির্দিষ্ট সংখ্যার বাইনারি স্ট্রিংগুলি একসাথে গ্রুপ করার চেষ্টা করছি।
এটি কাজ করে না:
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কী উপস্থিত না থাকলে বা কোনও সরবরাহিত ডিফল্ট মান উপস্থিত না করে ফেরত পাঠান, অন্যদিকে[]কী না থাকলে সূচক অপারেটর একটি ত্রুটি বাড়ায়।