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_groupsdoit ê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).
binariesn'est pas pertinente pour la question, vous pouvez donc simplement fournir sa valeur.
getrenvoieNonesi 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.