Ich versuche, die binären Zeichenfolgen bestimmter Zahlen basierend auf der Anzahl der Einsen in der Zeichenfolge zu gruppieren.
Das funktioniert nicht:
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]
Das erwartete Wörterbuch one_groupsmuss sein
{0: ['0000'],
1: ['0001', '1000'],
2: ['0011', '1001'],
3: ['0111', '1011'],
4: ['1111']}
Aber ich verstehe
{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']}
Bisher ist die einzige Sache , die funktioniert hat, wenn ich one_groups[x.count('1')] = one_groups.get(x.count('1')) + [x]stattone_groups[x.count('1')] += [x]
Aber warum ist das so? Wenn ich mich richtig erinnere, dict[key]soll der Wert dieses Wörterbuchs nicht zurückgegeben werden, ähnlich wie es dict.get(key)funktioniert? Ich habe diesen Thread gesehen. Warum dict.get (Schlüssel) anstelle von dict [Schlüssel]? aber es hat meine Frage für diesen speziellen Fall nicht beantwortet, da ich sicher weiß, dass das Programm nicht dazu gedacht ist, das zu bekommenKeyError
Ich habe es auch versucht, one_groups[x.count('1')].append(x)aber das funktioniert auch nicht.
bin(x)[2:].rjust(4, '0')kann vereinfacht werden '{:0>4b}'.format(x).
binariesist Ihre Vorgehensweise für die Frage nicht relevant, sodass Sie nur ihren Wert angeben können.
getRückgabe,Nonewenn der Schlüssel nicht vorhanden ist oder ein angegebener Standardwert, während der[]Indexoperator einen Fehler auslöst, wenn der Schlüssel nicht vorhanden ist.