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