Я намагаюся згрупувати двійкові рядки певних чисел на основі кількості 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)
працює? Я бачив цю тему Чому dict.get (ключ) замість dict [key]? але це не відповіло на моє запитання для цього конкретного випадку, оскільки я точно знаю, що програма не призначена для отриманняKeyError
Я також спробував, one_groups[x.count('1')].append(x)
але і це не працює.
bin(x)[2:].rjust(4, '0')
можна спростити до '{:0>4b}'.format(x)
.
binaries
, не стосується питання, тож ви можете просто надати його значення.
get
повернути,None
якщо ключ не існує або якесь задане значення за замовчуванням, тоді як оператор індексу[]
викликає помилку, якщо ключ не існує.