python:增加东京橱柜商店的价值

发布于 2024-12-19 12:12:29 字数 1459 浏览 0 评论 0原文

我正在使用 tcdb 来保存大型键值存储。键是表示用户 ID 的字符串,值是以下形式的字典。

{'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

作品,但对我来说看起来真的很难看。

I am using tcdb to hold a large key-value store. The keys are strings representing user IDs, the values are dicts of the form

{'coord':0,'node':0,'way':0,'relation':0}

The store is filled iterating over a data file that has coord, node, way and relation objects, each linked to a specific user. Here's my code for incrementing the fields:

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'

This does not work. I end up with a table that has all zero values:

def result(self):
    print 'cache is now %i records' % len(self.cache)
    for key in self.cache:
        print key + ': ' + str(self.cache[key])

yields:

...
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}
...

Why?

The last exception is never called.

EDIT This code in the first try block:

        tempdict = self.cache[uid]
        tempdict[typ] = tempdict.get(typ,0) + 1
        self.cache[uid] = tempdict

instead of the original

        self.cache[uid][typ] += 1

works, but looks really ugly to me.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

百合的盛世恋 2024-12-26 12:12:29

continue

After this line:

self.cache[uid] = {'coord':0,'node':0,'way':0,'relation':0}

Add this:

self.cache[uid][type] = 1

Also, please don't use type as a variable name as it hides the built-in of the same name.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文