2

例如,假设我有 3 个朋友,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 中实现的目标?是为了填充朋友的语法还是完全是一种新方法?

4

3 回答 3

3

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

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

那么如果约翰访问纽约,你会这样做:

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

它比您的方法更节省内存,因为它将城市名称存储在一个地方

于 2013-07-27T00:23:12.580 回答
1

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

friends = {
   "John": copy.deepcopy(places), 
   "Carter": copy.deepcopy(places), 
   "Bill": copy.deepcopy(places),
   }
于 2013-07-27T00:19:21.447 回答
1

如果“John”只访问过“LA”和“NY”,你不能这样做吗?

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

更有效的方法是将索引引用到地点列表,因此不是地点名称,而是索引列表,因此“约翰”将是 0 和 2。

于 2013-07-27T00:24:40.540 回答