在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})
您应该可以更新您的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)
谢谢。然而,我仍然需要“地方”成为口号的字典,这是不是列表的字眼? – user131983 2014-09-19 00:34:29
对于每条线上的每一个新城市,你认为关键是什么?由于城市出现多次(文件的每一行出现一次),会有一个涉及'places'变量的列表 – shaktimaan 2014-09-19 00:38:41
非常感谢。我可以问一下“count”的用途是什么? – user131983 2014-09-19 00:55:40
对于更新单个密钥,您应该使用这样的:
places["City"] = new_City
谢谢。然而,正如用户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]
至少我觉得......假设我明白你问什么
为什么你不只是做'地方[“市”] = new_City '? – shaktimaan 2014-09-19 00:19:44
给出2个不同''new_City''内容的示例,以及''places''的预期最终内容可能会帮助您理解您自己的问题,并帮助我们为您提供帮助。有几个因素需要解释,我强烈怀疑即使是问题的标题也是错误的。 – vaab 2014-09-19 00:50:22