gpt4 book ai didi

Python:追加到一个字典值,如果已经存在,该值是一个列表,会添加到所有键的值而不是

转载 作者:太空宇宙 更新时间:2023-11-03 16:02:02 26 4
gpt4 key购买 nike

Python 输出无法按照示例代码正确地将字符串值添加到循环内字典键的列表值中。

收到的输出:

{'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)

最佳答案

您的问题是您在多个字典键之间共享相同的列表:

>>> 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)

关于Python:追加到一个字典值,如果已经存在,该值是一个列表,会添加到所有键的值而不是,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40243754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com