【发布时间】:2016-11-07 13:23:23
【问题描述】:
将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
【问题讨论】:
-
你能显示你的数据吗?
-
已更新。您会看到所有 last 数据,因为它们都引用同一个对象。移动
temp_ord = OrderedDict()(不需要额外的字典)在循环内。 -
@jonrsharpe 究竟在哪个循环中,你能提供固定循环吗?
-
好吧,您希望哪个循环的每个项目都有一个新字典?这不是代码编写服务,您必须自己完成一些工作。
-
@jonrsharpe 好吧,我尝试将它放在两个循环中,这仍然给我两个错误:如果放在内部循环中,我会为每个名称得到空的 OrderedDict。如果放入外部循环中,我会在名字之后的每个地方得到一个空的 OrderedDict。在提供答案时,您至少可以参考您所指的循环,而不仅仅是参考“循环”,因此我之前的回答。
标签: python python-2.7 dictionary ordereddictionary