在字典中封装 OrderedDict

Encapsulated OrderedDict in a Dict

OrderedDict 封装到 dict 时出现 OrderedDict 未更新的问题。

目的是得到一个形式为的字典:

{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

问题是 reader 只能消耗一次(感谢@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