在Python中更新词典词典

问题描述:

我基本上是在阅读一个CSV文件,并且正在创建一个名为“City”的对象,该对象是使用传递给构造函数“city_constructor”的属性创建的。 编辑:该文件在每行上有“城市”信息。我有我在努力更新类型的字典词典,这需要在2种不同的类相关联的密钥值:在Python中更新词典词典

% d is an iterator obtained from dictReader = csv.DictReader(placesFile) 
% Defining my dict of dicts called places 
places = {"City":{}, "Country":{}} 

然后我尝试添加新对象到我的类型的字典的字典如下,但这似乎没有工作。有没有办法做到这一点?:

for d in dictReader: 
    new_City = city_constructor(d["Population"],d["Area"]) 
    places.update({"City":new_City}) 
+0

为什么你不只是做'地方[“市”] = new_City '? – shaktimaan 2014-09-19 00:19:44

+0

给出2个不同''new_City''内容的示例,以及''places''的预期最终内容可能会帮助您理解您自己的问题,并帮助我们为您提供帮助。有几个因素需要解释,我强烈怀疑即使是问题的标题也是错误的。 – vaab 2014-09-19 00:50:22

您应该可以更新您的places字典有:

places["City"] = new_City 

如果你的文件在每一行都有“城市”信息,那么我猜你会在每一行上做new_City = city_constructor(d["Population"],d["Area"])。在这种情况下,你的places应该是这样的:

places = {"City":[], "Country":[]} 

你会更新为:

for d in dictReader: 
    new_City = city_constructor(d["Population"],d["Area"]) 
    places["City"].append(new_City) 

如果它是类型的字典词典,那么你的places的结构应是这样的:

{ 
    "City": { 
     "City_1": <city_constructor(d["Population"],d["Area"]) of first line>, 
     "City_2": <city_constructor(d["Population"],d["Area"]) of second line>, 
     "City_3": <city_constructor(d["Population"],d["Area"]) of third line>, 
    } 
} 

也就是说,必须有一个新的关键字与每一条线遇到一个新的城市。可能是这样的:

count = 0 
for d in dictReader: 
    new_City = city_constructor(d["Population"],d["Area"]) 
    _a_dict = {'City_{}'.format(count):new_City} 
    count += 1 
    places["City"].update(_a_dict) 
+0

谢谢。然而,我仍然需要“地方”成为口号的字典,这是不是列表的字眼? – user131983 2014-09-19 00:34:29

+0

对于每条线上的每一个新城市,你认为关键是什么?由于城市出现多次(文件的每一行出现一次),会有一个涉及'places'变量的列表 – shaktimaan 2014-09-19 00:38:41

+0

非常感谢。我可以问一下“count”的用途是什么? – user131983 2014-09-19 00:55:40

对于更新单个密钥,您应该使用这样的:

places["City"] = new_City 
+0

谢谢。然而,正如用户Shaktimaan所说,我的文件在每一行都有“城市”信息。 – user131983 2014-09-19 00:36:53

for d in dictReader: 
    new_City = city_constructor(d["Population"],d["Area"]) 
    try: 
     places["City"].append(new_City) 
    except KeyError: 
     places["City"] = [new_City] 

至少我觉得......假设我明白你问什么