2016-11-07 27 views
0

當將OrderedDict封裝到dict中時,會出現OrderedDict未更新的問題。字典中的封裝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

它已更新。你看到所有的* last *數據,因爲它們都引用同一個對象**。 *在循環*內移動'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