2016-11-07 12 views
0

OrderedDictdictにカプセル化すると、OrderedDictが更新されないという問題が発生します。Dictでカプセル化OrderedDict

目的は、フォームとdictonaryを得ることです:

{name1: OrderedDict({year1:amount,year2:amount,...}), name2: OrderedDict({year1:amount,year2:amount,...})} 

しかし最初temp_ordを初期化した後、それがさらに更新されていないため、年金額ペアは最初の後にすべての名前も同じです。

CSV構造は、列:名前年番号にあります。私はこれがループの間違いであるかどうか、またはそれがディクテーションのカプセル化のためであるかどうかはわかりません。

import csv 
from collections import OrderedDict 

def plot_names(file_name, names): 
    temp_dict = {} 
    temp_ord = OrderedDict({}) 
    with open(file_name) as csvfile: 
     reader = csv.DictReader(csvfile) 
     for name in names: 
      for row in reader: 
       if name == row["name"]: 
        temp_ord[row["year"]] = row["number"] 
      temp_dict[name] = temp_ord 
    return temp_dict 

データ形式:

year name gender number /n 1993 Abarna f 1 /n 1993 Abetare f 1 /n 1993 Abir f 1 
+0

データを表示できますか? –

+0

更新されました。 **最後の*データはすべて同じオブジェクトを参照しているため、**すべての*データが表示されています**。 move 'temp_ord = OrderedDict() '(余分な辞書は不要)*ループ内*。 – jonrsharpe

+0

@jonrsharpeどのループで正確に、固定ループを提供できますか? – MtSummerbreeze

答えて

0

問題は、読者が一度だけ(感謝@jonrsharpe)消費できるということでした。

import csv 
from collections import OrderedDict 

def plot_names(file_name, names): 
    temp_dict = {} 
    for name in names: 
      with open(file_name) as csvfile: 
       reader = csv.DictReader(csvfile) 
       temp_ord = OrderedDict({}) 
       for row in reader: 
        if name == row["name"]: 
         temp_ord[row["year"]] = row["number"] 
       temp_dict[name] = temp_ord 
    return temp_dict