键是一个字符串,字典allLines的值是一个python对象列表。
original_list = allLines.get(key)
new_list = []
if original_list is not None:
for l in original_list:
new_list.append(l) #add rest
new_list.append(temp) # plus new one
allLines[key] = new_list
temps是添加到列表末尾的新对象。
当我执行最后一行时,它应该完全替换original_list但是当我打印dict时,我每次运行操作时都会获得具有不同列表的重复键。什么是正确的方法呢?
我第一次运行
allLines = {"boolean mark":[obj1]}
我第二次跑步时得到:
allLines = {"boolean mark":[obj1], "boolean mark":[obj1, temp]}
而不是:
allLines = {"boolean mark":[obj1, temp]}
答案 0 :(得分:1)
DATA = {"records": [{"key1": "AAA", "key2": "BBB", "key3": "CCC", "key4": "AAA"}]}
for name, datalist in DATA.iteritems(): # Or items() in Python 3.x
for datadict in datalist:
for key, value in datadict.items():
if value == "AAA":
datadict[key] = "XXX"
print (DATA)
输出:
{'records': [{'key3': 'CCC', 'key2': 'BBB', 'key1': 'XXX', 'key4': 'XXX'}]}
取自here
答案 1 :(得分:0)
我无法使用下面的代码重现您的结果。我不得不添加一些东西来制作你发布的可执行文件,但之后,它似乎做你想要的,而不是你说的发生 - 这无论如何都是不可能的,因为字典不能有重复的密钥,因为你声称是发生。这两个键必须在某种程度上有所不同,如果你能弄清楚它们之间的区别,你可以自己解决问题。
def obj(name):
return type(name, (object,), dict(__repr__=lambda self: name))()
allLines = {} # global var
def operation(key, temp):
original_list = allLines.get(key)
new_list = []
if original_list is not None:
for l in original_list:
new_list.append(l) #add rest
new_list.append(temp) # plus new one
allLines[key] = new_list
operation('boolean mark', obj('obj1'))
print 'allLines =', allLines
operation('boolean mark', obj('temp'))
print 'allLines =', allLines
输出:
allLines = {'boolean mark': [obj1]}
allLines = {'boolean mark': [obj1, temp]}