Próbuję pogrupować ciągi binarne określonych liczb na podstawie liczby 1 w ciągu.
To nie działa:
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]
Oczekiwany słownik one_groupsmusi być
{0: ['0000'],
1: ['0001', '1000'],
2: ['0011', '1001'],
3: ['0111', '1011'],
4: ['1111']}
Ale rozumiem
{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']}
Jak dotąd jedyne, co zadziałało, to jeśli użyję one_groups[x.count('1')] = one_groups.get(x.count('1')) + [x]zamiastone_groups[x.count('1')] += [x]
Ale dlaczego tak jest? Jeśli dobrze pamiętam, czy nie dict[key]powinno zwracać wartości tego słownika, podobnie jak dict.get(key)działa? Widziałem ten wątek Dlaczego dict.get (klucz) zamiast dict [klucz]? ale nie odpowiedziałem na moje pytanie w tym konkretnym przypadku, ponieważ wiem na pewno, że program nie jest przeznaczony do uzyskaniaKeyError
Próbowałem też, one_groups[x.count('1')].append(x)ale to też nie działa.
bin(x)[2:].rjust(4, '0')można uprościć '{:0>4b}'.format(x).
binariesnie ma związku z pytaniem, więc możesz po prostu podać jego wartość.
getzwraca,Nonejeśli klucz nie istnieje lub podana jest wartość domyślna, a operator indeksu[]zgłasza błąd, jeśli klucz nie istnieje.