J'essaie de regrouper les chaînes binaires de certains nombres en fonction du nombre de 1 dans la chaîne.
Cela ne fonctionne pas:
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]
Le dictionnaire attendu one_groups
doit être
{0: ['0000'],
1: ['0001', '1000'],
2: ['0011', '1001'],
3: ['0111', '1011'],
4: ['1111']}
Mais je reçois
{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']}
Jusqu'à présent, la seule chose qui a fonctionné est si j'utilise one_groups[x.count('1')] = one_groups.get(x.count('1')) + [x]
au lieu deone_groups[x.count('1')] += [x]
Mais pourquoi en est-il ainsi? Si je me souviens bien, n'est-il pas dict[key]
censé renvoyer la valeur de ce dictionnaire, comme cela dict.get(key)
fonctionne? J'ai vu ce fil Pourquoi dict.get (key) au lieu de dict [key]? mais il n'a pas répondu à ma question pour ce cas particulier, car je sais avec certitude que le programme n'est pas destiné à obtenir leKeyError
J'ai également essayé one_groups[x.count('1')].append(x)
mais cela ne fonctionne pas non plus.
bin(x)[2:].rjust(4, '0')
peut être simplifié '{:0>4b}'.format(x)
.
binaries
n'est pas pertinente pour la question, vous pouvez donc simplement fournir sa valeur.
get
renvoieNone
si la clé n'existe pas ou toute valeur par défaut fournie, tandis que l'opérateur d'index[]
génère une erreur si la clé n'existe pas.