使用字典填充字典键的最有效方法

时间:2013-07-27 00:14:04

标签: python dictionary

比方说,我有三个朋友,John,Carter,Bill,我想跟踪他们访问过的地方。这些地方在字典中,如果他们访问过这个地方,它的值为1,如果没有,则为0。

places = {"LA": 0, "San Jose": 0, "NY": 0}

现在设置它不起作用,因为它是一个浅层副本:

friends = {"John": places, "Carter": places, "Bill": places}

我现在的简单解决方案是:

friends = {"John": {"LA": 0, "San Jose": 0, "NY": 0}, "Carter": {"LA": 0, "San Jose": 0, "NY": 0}, "Bill": {"LA": 0, "San Jose": 0, "NY": 0}}

这看起来效率不高。有没有更好的方法来做我想在Python中实现的目标?要么填充朋友的语法还是完全填充新方法?

3 个答案:

答案 0 :(得分:3)

如果您有一组静态城市,那么您可以将地图城市名称存储为该城市的关键字和索引作为值。此外,对于每个人,您可以存储一个访问列表,其中该列表的第i个元素表示在第i个城市的访问次数:

places = {"LA": 0, "San Jose": 1, "NY": 2}
friends = {"John": [0, 0, 0], "Carter": [0, 0, 0], "Bill": [0, 0, 0]}

然后,如果John访问纽约,你会这样做:

friends["John"][places["NY"]] += 1

它比你的方法更有效,因为它将城市名称存储在一个地方

答案 1 :(得分:1)

我相信你正在寻找copy.deepcopy()

friends = {
   "John": copy.deepcopy(places), 
   "Carter": copy.deepcopy(places), 
   "Bill": copy.deepcopy(places),
   }

答案 2 :(得分:1)

如果' John'只访问过例如“洛杉矶”。并且' NY',你不能这样做吗?

"John": {"LA", "NY"}, "Carter": {"San Jose"}, etc...

更有效的是将索引引用到地点列表,因此不是地名的名称,而是索引列表,所以' John'将是0和2。