文字列にある1の数に基づいて、特定の数値のバイナリ文字列をグループ化しようとしています。
これは機能しません:
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]
予想される辞書one_groups
は
{0: ['0000'],
1: ['0001', '1000'],
2: ['0011', '1001'],
3: ['0111', '1011'],
4: ['1111']}
しかし、私は得る
{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']}
これまでのところ機能しているのは、one_groups[x.count('1')] = one_groups.get(x.count('1')) + [x]
代わりにone_groups[x.count('1')] += [x]
しかし、それはなぜですか?私が正しく思い出せば、dict[key]
どのようにdict.get(key)
機能するのと同じように、その辞書の値を返すはずではありませんか?私はこのスレッドを見ましたなぜdict [key]ではなくdict.get(key)ですか?しかし、この特定のケースに対する私の質問には答えませんでした。なぜなら、プログラムがKeyError
私も試しましたone_groups[x.count('1')].append(x)
が、これもうまくいきません。
bin(x)[2:].rjust(4, '0')
に簡略化できます'{:0>4b}'.format(x)
。
binaries
は質問には関係ないため、その値を提供するだけで済みます。
get
None
キーが存在しない場合、または指定されたデフォルト値の場合は戻り、キーが存在しない場合、インデックス演算子[]
はエラーを発生させます。