Estoy tratando de agrupar las cadenas binarias de ciertos números en función de cuántos 1 hay en la cadena.
Esto no funciona
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]
El diccionario esperado one_groupsdebe ser
{0: ['0000'],
1: ['0001', '1000'],
2: ['0011', '1001'],
3: ['0111', '1011'],
4: ['1111']}
Pero consigo
{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']}
Hasta ahora, lo único que ha funcionado es si uso en one_groups[x.count('1')] = one_groups.get(x.count('1')) + [x]lugar deone_groups[x.count('1')] += [x]
¿Pero por qué es así? Si recuerdo correctamente, ¿no se dict[key]supone que devuelve el valor de ese diccionario, similar a cómo dict.get(key)funciona? He visto este hilo ¿Por qué dict.get (key) en lugar de dict [key]? pero no respondió mi pregunta para este caso en particular, ya que estoy seguro de que el programa no está destinado a obtener elKeyError
También lo he intentado one_groups[x.count('1')].append(x)pero esto tampoco funciona.
bin(x)[2:].rjust(4, '0')se puede simplificar a '{:0>4b}'.format(x).
binariesno es relevante para la pregunta, por lo que podría proporcionar su valor.
getdevuelveNonesi la clave no existe o algún valor predeterminado proporcionado, mientras que el operador de índice[]genera un error si la clave no existe.