Python输出没有按照示例代码正确地将字符串值添加到循环中的dict键的列表值中。
收到的产出:
{'one': ['dev-1', 'dev-3'], 'three': ['dev-1', 'dev-3'], 'five': ['dev-3'],
'four': ['dev-3'], 'two': ['dev-1', 'dev-3']}预期产出:
{'one': ['dev-1', 'dev-3'], 'three': ['dev-1'], 'five': ['dev-3'],
'four': ['dev-3'], 'two': ['dev-1']}以下是守则:
grp = ['instance "dev-1"\n', 'row id 68\n', 'grp mem "one" "two" "three"\n', 'next\n',
'instance "dev-3"\n', 'row id 18d\n', 'grp mem "four" "five" "one"', 'next\n']
grp_no = 0
mapping_dict = {}
current_grp = []
while grp_no < len(grp):
line = grp[grp_no]
if grp_no < len(grp):
instance = line.startswith('instance ')
grp_member = line.startswith('grp mem ')
if not (instance or grp_member):
grp_no += 1
continue
if instance:
obj_id = (line.split()[1]).strip('"')
current_grp.append(obj_id)
if grp_member:
current_members = line.split()
for i in range(2, len(current_members), 1):
mem = current_members[i]
mem = mem.strip('"')
check_point = mem in mapping_dict and (obj_id in mapping_dict[mem])
check_point1 = mem in mapping_dict and not obj_id in mapping_dict[mem]
if check_point:
continue
elif check_point1:
(mapping_dict[mem]).append(obj_id)
else:
mapping_dict[mem] = current_grp
current_grp = []
grp_no += 1
print(mapping_dict)发布于 2016-10-25 16:36:32
您的问题是在多个字典键之间共享相同的列表:
>>> for k, v in mapping_dict.items():
... print(id(v), k, v)
...
41955656 four ['dev-3']
41897936 one ['dev-1', 'dev-3']
41897936 three ['dev-1', 'dev-3']
41897936 two ['dev-1', 'dev-3']
41955656 five ['dev-3']要实现你想要的,有一种更简单的方法:
mapping_dict = {}
instance = None
for line in grp:
if line.startswith('instance'):
instance = line.split('"')[1]
elif line.startswith('grp mem'):
for member in line[7:].replace('"', '').split():
mapping_dict.setdefault(member, []).append(instance)https://stackoverflow.com/questions/40243754
复制相似问题