在字典中封装 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
将 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