我需要循环一个字典列表并检查是否存在值。如果它存在,那么我从同一个字典中取另一个值并将其存储在另一个列表中的新字典中。我拥有的是这个
class_copy=[]
for root, dirs, files in os.walk(files_path+"/TD"):
for file in files:
file_name=os.path.splitext(file)[0]
for d in data_list:
if d['id'] == file_name:
cc['class']=d['fic']
class_copy.append(cc)
break
所以我循环浏览一些文件。 data_list是字典列表。这些字典每个都有一个与文件名匹配的“id”,所以当找到值为'id'的字典'd'时,我在字典'd'上取'fic'的值并用密钥'创建一个新的字典' class'存储'fic'的值。然后我将这个字典存储在一个名为class_copy的新词典列表中。
问题是循环遍历all之后,class_copy中的所有字典都是相同的。我想通过循环和更改d的实例,class_copy上的值也在改变,但我怎么能保留这些值呢?有更好的方法吗?
答案 0 :(得分:3)
您实际上并未创建新字典,而是在更新现有字典:
cc['class']=d['fic']
只需更新与密钥'class'
关联的值即可。将您的代码更改为:
cc = {'class': d['fic']}
将创建一个新的字典实例。
列表中所有条目最终相同的原因是列表中的每个项目都是相同的字典。通过创建如图所示的新字典,您将在列表中拥有您期望的独立实例。
答案 1 :(得分:0)
class_copy.append({'class': d['fic']'})