Я использую tcdb
для хранения большого хранилища ключей.Ключи - это строки, представляющие идентификаторы пользователей, значения - это диктанты формы
{'coord':0,'node':0,'way':0,'relation':0}
Хранилище заполняется итерацией по файлу данных, который имеет объекты координат, узлов, путей и отношений, каждый из которых связан с конкретным пользователем.,Вот мой код для увеличения полей:
def increment(self,uid,typ):
uid = str(uid)
type = str(typ)
try:
self.cache[uid][typ] += 1
except KeyError:
try:
self.cache[uid][typ] = 1
except KeyError:
try:
print 'creating record for %s' % uid
self.cache[uid] = {'coord':0,'node':0,'way':0,'relation':0}
except KeyError:
print 'something\'s messed up'
Это не работает.Я получаю таблицу с нулевыми значениями:
def result(self):
print 'cache is now %i records' % len(self.cache)
for key in self.cache:
print key + ': ' + str(self.cache[key])
выход:
...
4951: {'node': 0, 'coord': 0, 'relation': 0, 'way': 0}
409553: {'node': 0, 'coord': 0, 'relation': 0, 'way': 0}
92274: {'node': 0, 'coord': 0, 'relation': 0, 'way': 0}
259040: {'node': 0, 'coord': 0, 'relation': 0, 'way': 0}
...
Почему?
Последнее исключение никогда не вызывается.
РЕДАКТИРОВАТЬ Этот код в первом try
блоке:
tempdict = self.cache[uid]
tempdict[typ] = tempdict.get(typ,0) + 1
self.cache[uid] = tempdict
вместо оригинального
self.cache[uid][typ] += 1
работает, но выглядит мне безобразно.