比方说,我有三个朋友,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中实现的目标?要么填充朋友的语法还是完全填充新方法?
答案 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。