Python什么是三重数据的数据结构

时间:2010-06-17 17:46:23

标签: python data-structures

我有一组有三个属性的数据,比如A,B和C,其中A是索引的一种(即,A用于查找其他两个属性。)什么是这类数据的最佳数据结构?

我使用了两个字典,其中A作为每个字典的索引。但是,当对数据的查询与A的任何实例都不匹配时会出现关键错误。

4 个答案:

答案 0 :(得分:3)

你可以使用A作为键的字典,以及字典中的项目作为2项元组或列表吗?如果您以一致的方式处理任何数据,您还可以考虑在字典中存储具有2个属性的类。

答案 1 :(得分:3)

AtoB = {"A1":"B1", "A2":"B2"}
AtoB.get("A3", None)
=> None

答案 2 :(得分:2)

作为元组字典的替代方法,您可以使用对象来存储B和C:

class Thing:
    def __init__(self, B=None, C=None):
        self.B = B
        self.C = C

stuff = {A1: Thing(B1, C1)}
B1 = stuff[A1].B

processTriple(A1, stuff[A1].B, stuff[A1].C)

nothing = stuff.get(A2)

虽然它有点浪费,但您也可以在对象中存储A,以便每个实例代表一个完整的三元组。然后你可以比上面的例子更有效地传递它们。

答案 3 :(得分:0)

我建议使用A键入(B,C)的字典,所以d = {A : (B, C)}

导致错误的不存在键的问题可以通过以下方式解决(感谢我忘记了has_key函数的直觉):

if d.has_key(A):
    # do whatever you want
else:
    # A does not exist in your dictionary and you can handle this properly

另一种选择是在try: except:区块中执行此操作,但我倾向于同意直觉,如果密钥以非完全不常见的速率丢失,has_key将显示更好表现和(可以说)更好的概念意义。