在Python字典中为一个值使用多个键

时间:2013-05-13 21:52:47

标签: python dictionary

我有一个使用整数作为键的Python字典

d[7] = ...

引用自定义对象:

c = Car()
d[7] = c

但是,每个自定义对象也都有一个字符串标识符(来自第三方)。我希望能够使用整数或字符串访问对象。在同一个字典中使用这两个键的首选方法是什么?

d[7] = c
d["uAbdskmakclsa"] = c

或者我应该把它分成两个词典?或者有更好的方法吗?

3 个答案:

答案 0 :(得分:4)

这实际上取决于你正在做什么。

如果您从不同的来源获得不同类型的密钥,那么您始终知道自己要查找哪种密钥,从概念上讲,使用单独的词典会更有意义。

另一方面,如果你需要能够处理任何一种类型的密钥,那么使用单个字典可能更简单。否则,您需要编写类似于使用类型切换的代码,或尝试使用一个dict,然后在KeyError上尝试另一个,或者其他丑陋的东西。

(如果你担心效率,那么它无论如何都不会产生太大的影响。在5000字典词典中看起来只是非常非常微小一点就像10000字典一样,只需要很少的额外内存来保存两个5000键词典而不是一个10000键词典。所以,不要担心效率;做任何有意义的事情。我不要#39;没有任何理由相信你 担心效率,但很多人提出这样的问题似乎是,所以我只是覆盖了基础。)

答案 1 :(得分:1)

这是一个相当具体的情况,我怀疑在这种情况下有什么“官方”偏好。但是,我觉得拥有多种类型的键是“脏”的,虽然我不能真正想到它的原因。

但是既然你声明字符串密钥来自第三方,那么单独这可能是拆分到另一个字典的一个很好的理由。我也会分手。你永远不知道未来会带来什么,这种方法更容易维护。如果您考虑类型安全,也不会出错。

要在字典中设置值,您可以使用辅助方法。这将使添加更容易,并防止您忘记添加/更新其中一个词典。

答案 2 :(得分:1)

我会用两个词。一个映射第三方键到整数键,另一个映射整数键到对象。根据您更频繁使用哪一个,您当然可以切换。