gpt4 book ai didi

Python:将重复字典复制到列表中 - 最后一个字典项被欺骗到所有列表项

转载 作者:太空宇宙 更新时间:2023-11-04 10:49:20 24 4
gpt4 key购买 nike

考虑以下因素:

import re
sequence = 'FFFFFF{7}FFFFFF'
patterns = [ ('([0-9a-fA-F]+)', 'Sequence'),
('(\\([0-9a-fA-F]+\\|[0-9a-fA-F]+\\))', 'Option'),
('({[0-9a-fA-F]+})', 'Range'),
('(\\[[0-9a-fA-F]+:([0-9a-fA-F]+|\*)\\])', 'Slice'),
('(\\?\\?)+', 'Byte_value_Wildcard'),
('(\\*)+', 'Byte_length_wildcard') ]
fragment_counter = 0
fragment_dict= {}
fragments_list = []
while sequence:
found = False
for pattern, name in patterns:
m = re.match (pattern,sequence)
if m:
fragment_counter+=1
m = m.groups () [0]
fragment_dict["index"]=fragment_counter
fragment_dict["fragment_type"]=name
fragment_dict["value"]=m
print fragment_dict
fragments_list.append(fragment_dict)
sequence = sequence [len (m):]
found = True
break
if not found: raise Exception ('Unrecognized sequence')

print fragments_list

每次它到达“print fragment_dict”行时,我都会得到正确的(预期的)输出:

{'index': 1, 'fragment_type': 'Sequence', 'value': 'FFFFFF'}
{'index': 2, 'fragment_type': 'Range', 'value': '{7}'}
{'index': 3, 'fragment_type': 'Sequence', 'value': 'FFFFFF'}

但是,列表项 fragments_list 是最终 dict 的 3 个副本,而不是我期望的每一行:

[{'index': 3, 'fragment_type': 'Sequence', 'value': 'FFFFFF'}, {'index': 3, 'fragment_type': 'Sequence', 'value': 'FFFFFF'}, {'index': 3, 'fragment_type': 'Sequence', 'value': 'FFFFFF'}]

我假设这是因为 append 引用了字典的实例,而不是复制字典的每个迭代。我查看了使用 list() 函数,但在 dict 项上它只给了我一个 dict 键的列表。

我做错了什么?
我不拘泥于数据类型,我只需要一种方法来为我找到的每个片段保存 3 个数据元素(也许是第 4 个)。

最佳答案

你非常接近。代替 list() 函数,它从任何序列生成一个新的 list(在这种情况下,作为序列的 dict 是一个序列它的键),使用 dict() 函数,它从任何映射生成一个新的 dict

或者,也许更简单,只需使用 copy 方法。

或者,更简单地说,只需将 fragment_dict= {} 移动到循环中,这样您就可以构建一个新的 dict 而不是继续重复使用同一个。

关于Python:将重复字典复制到列表中 - 最后一个字典项被欺骗到所有列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14948500/

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