Sto cercando di raggruppare le stringhe binarie di determinati numeri in base al numero di 1 presenti nella stringa.
Questo non funziona:
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]
Il dizionario previsto one_groups
deve essere
{0: ['0000'],
1: ['0001', '1000'],
2: ['0011', '1001'],
3: ['0111', '1011'],
4: ['1111']}
Ma capisco
{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']}
Finora l'unica cosa che ha funzionato è se uso one_groups[x.count('1')] = one_groups.get(x.count('1')) + [x]
invece dione_groups[x.count('1')] += [x]
Ma perché è così? Se ricordo bene, non dict[key]
dovrebbe restituire il valore di quel dizionario, simile a come dict.get(key)
funziona? Ho visto questa discussione Perché dict.get (chiave) invece di dict [chiave]? ma non ha risposto alla mia domanda per questo caso particolare, dal momento che so per certo che il programma non è pensato per ottenere ilKeyError
Ho anche provato, one_groups[x.count('1')].append(x)
ma neanche questo funziona.
bin(x)[2:].rjust(4, '0')
può essere semplificato '{:0>4b}'.format(x)
.
binaries
non è rilevante per la domanda, quindi potresti semplicemente fornire il suo valore.
get
restituisceNone
se la chiave non esiste o qualsiasi valore predefinito fornito, mentre l'operatore indice[]
genera un errore se la chiave non esiste.