我试图根据字符串中有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.get(key)而不是dict [key]?但这并没有回答我针对此特定情况的问题,因为我确定该程序并非旨在获取KeyError
我也尝试过,one_groups[x.count('1')].append(x)
但这也不起作用。
bin(x)[2:].rjust(4, '0')
可以简化为'{:0>4b}'.format(x)
。
get
None
如果键不存在或没有提供任何默认值,则返回;而如果键不存在,则索引运算符[]
将引发错误。