문자열에 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
키가 존재하지 않거나 제공된 기본값이면 키를 반환 하고 키가 없으면 인덱스 연산자[]
가 오류를 발생시킵니다.