-2

键是一个字符串,字典 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]}
4

2 回答 2

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'}]}

取自这里

于 2013-03-26T14:01:54.093 回答
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]}
于 2013-03-26T15:05:07.907 回答