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

これを2回実行すると、次のようになります。

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

以下のコードでは結果を再現できません。あなたが投稿したものを実行可能にするためにいくつかのことを追加する必要がありましたが、その後、あなたが言っていることではなく、あなたが望むことをしているようです - とにかく不可能です.ハプニング。この 2 つのキーには何らかの違いがあるはずです。違いが何であるかを理解できれば、問題を自分で解決できる可能性があります。

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 に答える