我正在尝试将 var token = `Bearer-some.token`;
var layer = new ol.layer.Vector({
source: new ol.source.Vector({
url: "Geo_JSON_URL",
format: new ol.format.GeoJSON()
}),
style: myStyle,
zIndex: 10
})
子类化以修改其dict
方法。
我要寻找的行为是添加公用键的值并保留唯一的键。
update
换句话说,就像我在做
g1 = MyDict({1: 1, 2: 2})
g2 = MyDict({1: 1, 3: 3})
g1.update(g2) # should result in g1 = {1: 2, 2: 2, 3: 3}
# ^ because it is 1 from g1 + 1 from g2
为此任务,我写了以下内容:
from collections import Counter
g1 = dict(Counter(g1) + Counter(g2))
但是这样做:
class MyDict(dict):
def __update__(self, d2):
keys = set(self).union(d2)
self = {k: self.get(k, 0) + d2.get(k, 0) for k in keys}
return
它产生:
g1 = MyDict({1: 1, 2: 2})
g2 = MyDict({1: 1, 3: 3})
g1.update(g2)
但是,如果我这样做:
{1: 1, 2: 2, 3: 3}
然后
class MyDict(dict):
def __add__(self, d2):
keys = set(self).union(d2)
return {k: self.get(k, 0) + d2.get(k, 0) for k in keys}
实现了所需的行为。
覆盖g1 = g1 + g2
方法时我在做什么错了?
答案 0 :(得分:3)
我找到了以下方法:
class MyDict(dict):
def update(self, d2):
for k in set(self).union(d2):
self[k] = self.get(k, 0) + d2.get(k, 0)
return
在操作时确实如此:
g1 = MyDict({1: 1, 2: 2})
g2 = MyDict({1: 1, 3: 3})
g1.update(g2)
导致:
print(g1) # -> {1: 2, 2: 2, 3: 3}
如果有更好的方法,请告诉我。
感谢您的评论!