我有这个清单:
lst= ['1 5','1 12','1 55','2 95', '2 66', '3 45',...]
正如您所看到的,每个项目由2个数字组成,第二个数字最多为4个字符,并且它们以空格分隔.
我想把它转移到这样的字典中
dct={1:{'doc0005','doc0012','doc0055'},2:{'doc0095','doc0066'},3:{'doc0045'},...}
每个值项应该是7个字符长:’doc’someZeros’列表项中的第二个数字,其中someZeros是额外的0个字符,使值7个字符长.第一个数字将是字典的关键
我试图拆分列表中的每个项目并通过循环将其添加到字典中,但我感到困惑
解决方法:
使用(默认)集合字典很容易做到这一点.
from collections import defaultdict
d = defaultdict(set)
for l in lst:
k, v = l.split()
d[k].add(f'doc{int(v):04d}') # "doc{:04d}".format(int(v))
print(d)
defaultdict(set,
{'1': {'doc0005', 'doc0012', 'doc0055'},
'2': {'doc0066', 'doc0095'},
'3': {'doc0045'}})
如果您更喜欢简单的字典,或者使用dict.setdefault来对上面的结果进行分类,或使用稍微不同(效率较低的解决方案):
d = {}
for l in lst:
k, v = l.split()
d.setdefault(k, set()).add(f'doc{int(v):04d}') # "doc{:04d}".format(int(v))
print(d)
{'1': {'doc0005', 'doc0012', 'doc0055'},
'2': {'doc0066', 'doc0095'},
'3': {'doc0045'}}
标签:python
来源: https://codeday.me/bug/20190731/1586515.html