1

ETREE を使用してデータがフェッチされるプログラムに7つの辞書があります。問題は、出力に示されているように、Pythonが各辞書に対して個別の辞書インスタンスを作成しないことです。これらの辞書のいずれかを印刷すると、同じ出力が得られます。すべてのデータの和集合を持つ大きな辞書。

tr_dict,tr_text,exp_dict,exp_text,top_dict,top_text,times=[{}]*7 #n 個の空の辞書を作成
    トランスクリプトの tr の場合:
        trtext = tr.find('TATION/ANNOTATION_VALUE').text
        tr_time_ref = tr.find('TATION').attrib['TIME_SLOT_REF1']
        tr_ann_ref = tr.find('ATION').attrib['ANNOTATION_ID']

        tr_dict[tr_ann_ref] = tr_time_ref
        tr_text[tr_time_ref]=trtext

...

出力:

[データベース]>>> exp_dict は exp_text です
真実
[データベース]>>> tr_dict は tr_text です
真実
[データベース]>>> tr_dict は exp_dict です
真実

もちろん、私はこれが起こらないようにしたくありません.Pythonでそれぞれに個別のdictを作成して使用してもらいたいです。

4

1 に答える 1

5

問題は次のとおりです。

[{}] * 7

代わりにこれを行います:

[{}, {}, {}, {}, {}, {}, {}]

説明: 最初の行は1 つの辞書を作成し、それへの 7 つの参照をリストにコピーしますが、2 行目は 7 つの異なる辞書を作成します - これがあなたがやりたいことです。または、コメントに記載されているように、これも機能します。

[{} for _ in range(7)]
于 2013-08-21T19:25:53.430 に答える