0

以下のように、名前と各キーのリストで構成される辞書があります。

dict1={}
for i in names:
    dict1[i]=[]

次に、csv ファイルを処理し、必要な結果を見つけ、それを対応する辞書値に追加し、以下のように名前と辞書値をリストに追加します。

list1=[]
for i2 in data:
    total_score=sum(i2[1:4])
    dict1[i2[0]].append(total_score)
    list1.append([i2[0],dict1[i2[0]]])

list1 の要素を出力しようとすると、プログレッシブ リストではなく、各キーの最終リストが取得されます。

終了リストは次のようになります。

list1=[[name1,[50]],[name1,[50,60]],[name1,[50,60,0,85]]]

アイデアはありますか?ありがとう。

4

2 に答える 2

2

何らかの方法でリストのクローンを作成しない限り、リストのコピーは1つだけになります(つまり、最後のコピー)。私があなたが望むものを理解しているなら、解決策は次のようなものです

list1=[]
for i2 in data:
    total_score=sum(i2[1:4])
    templist = dict1[i2[0]][:]
    templist.append(total_score)
    list1.append([i2[0],templist])

詳細については、 http://docs.python.org/library/copy.htmlを参照してください。

于 2012-06-08T10:28:07.600 に答える
1

変更するだけです:

    list1.append([i2[0],dict1[i2[0]]]) 

に:

    list1.append([i2[0],dict1[i2[0]][:]])

これにより、リストを参照するだけでなく、dict1のリストの現在の値がコピーされます。

(この追加は以前はprintステートメントであり、dict1のリストの現在の値を表示するだけだったと思います。しかし、list1に保存すると、リストのコピーではなく、リストへの参照が保存されます。スライス演算子は[:]コピーを作成するので、キーのリストへの追加の追加i2[0]はコピーに追加されません。)

于 2012-06-08T11:55:37.157 に答える