Tôi đang cố gắng nhóm các chuỗi nhị phân của một số số nhất định dựa trên số chuỗi có 1.
Điều này không hoạt động:
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]
Từ điển dự kiến one_groups
cần phải được
{0: ['0000'],
1: ['0001', '1000'],
2: ['0011', '1001'],
3: ['0111', '1011'],
4: ['1111']}
Nhưng tôi hiểu
{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']}
Cho đến nay, điều duy nhất đã làm việc là nếu tôi sử dụng one_groups[x.count('1')] = one_groups.get(x.count('1')) + [x]
thay vìone_groups[x.count('1')] += [x]
Nhưng tại sao lại như vậy? Nếu tôi nhớ lại một cách chính xác, không dict[key]
phải trả lại giá trị của từ điển đó, tương tự như cách dict.get(key)
hoạt động? Tôi đã thấy chủ đề này Tại sao dict.get (khóa) thay vì dict [key]? nhưng nó không trả lời câu hỏi của tôi cho trường hợp cụ thể này, vì tôi biết chắc chắn chương trình không có nghĩa là để có đượcKeyError
Tôi cũng đã thử one_groups[x.count('1')].append(x)
nhưng điều này cũng không hiệu quả.
bin(x)[2:].rjust(4, '0')
có thể được đơn giản hóa để '{:0>4b}'.format(x)
.
binaries
không liên quan đến câu hỏi, vì vậy bạn chỉ có thể cung cấp giá trị của nó.
get
trả vềNone
nếu khóa không tồn tại hoặc bất kỳ giá trị mặc định nào được cung cấp, trong khi toán tử chỉ mục[]
đưa ra lỗi nếu khóa không tồn tại.