私はtcdb
を使用して大きなキー値ストアを保持しています。キーはユーザーIDを表す文字列であり、値がフォームpython:tokyoキャビネットストアの値を増やす
{'coord':0,'node':0,'way':0,'relation':0}
のdictsている店舗は、それぞれが特定のユーザにリンクされ、COORD、ノード、方法及び関連オブジェクトを有するデータファイルの繰り返し処理を充填されています。フィールドをインクリメントするコードは次のとおりです。
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
ブロック内
EDITこのコード:代わりに、元
self.cache[uid][typ] += 1
作品の
tempdict = self.cache[uid]
tempdict[typ] = tempdict.get(typ,0) + 1
self.cache[uid] = tempdict
が、私には本当に醜いです。この行の後
「coord」、「node」、「way」または「relation」です。 – mvexel
テーブルを出力するコードを挿入しました。 – mvexel
申し訳ありませんが、これはいくつかのキーを追加した別のバージョンから出力されました。修正されました。 – mvexel