存储2索引对象的更自然的方式是什么?

时间:2013-09-17 19:24:29

标签: python dictionary

我有很多用两个索引编制索引的数据。目前我将内容存储为嵌套字典,如

{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的方式来获取具有两个凹痕的数据?如果内部索引总是相同的设置会有帮助吗?

1 个答案:

答案 0 :(得分:-1)

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

#! /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] )