首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >存储2索引对象的更自然的方式?

存储2索引对象的更自然的方式?
EN

Stack Overflow用户
提问于 2013-09-18 03:24:29
回答 1查看 93关注 0票数 3

我有很多数据,这些数据是用两个索引建立索引的。目前,我以嵌套字典的形式存储内容,比如

代码语言:javascript
复制
{1000: {3: 1.0, 4: 2.0}, 1001: {3: 3.0, 4: 4.0} , 1002: {3: 5.0, 4: 0.0}}

这样我就可以用mydata[1000][4]访问数据了。我在一个包装器类中有一个嵌套的字典,它允许我访问具有第二个索引mydata.get(second=4)的所有元素,得到`2.0,4.0,0.0`

嵌套字典可以工作,但在IMO中非常混乱。我最近开始构建这些结构,大约有100,000个条目,而嵌套字典的初始构建被证明非常慢。

有没有一种更自然的或者更有pythonic风格的方法来处理具有两个indecies的数据?如果内部索引总是相同的集合,会有帮助吗?

EN

回答 1

Stack Overflow用户

发布于 2013-09-18 04:03:00

也许你可以通过滥用一些切片来实现这一点:

代码语言:javascript
复制
#! /usr/bin/python3

class MyDict:
    def __init__ (self, d):
        self.d = d

    def __getitem__ (self, key):
        if isinstance (key, int):
            return [_ for _ in self.d [key].values () ]
        if isinstance (key, slice):
            if key.start == None:
                return [v for s in (d.items () for d in self.d.values () ) for k, v in s if k == key.stop]
            if key.stop == None:
                return [_ for _ in self.d [key.start].values () ]
            return self.d [key.start] [key.stop]
        [] [key]

d = {1000: {3: 1.0, 4: 2.0}, 1001: {3: 3.0, 4: 4.0} , 1002: {3: 5.0, 4: 0.0}}
d = MyDict (d)

print (d [1000] )
print (d [1000:] )
print (d [:4] )
print (d [1001:4] )
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18858220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档