我正在尝试根据字符串中有多少个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)
的工作原理一样。我看过这个线程 Why dict.get(key) instead of dict[key]?,但它没有回答我的问题,因为我确定程序不能得到 KeyError
。我还尝试过 one_groups[x.count('1')].append(x)
,但这也行不通。
get
方法会返回None
或者提供的默认值,而索引运算符[]
则会在键不存在时抛出一个错误。 - adnanmuttalebbin(x)[2:].rjust(4, '0')
可以简化为'{:0>4b}'.format(x)
。 - wjandrea