0

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

d[7] = ...

引用自定义对象:

c = Car()
d[7] = c

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

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

或者我应该把它分成两个字典?或者,还有更好的方法?

4

3 回答 3

4

这真的取决于你在做什么。

如果您从不同的来源获得不同类型的键,那么您总是知道您正在查找哪种类型,那么从概念上讲,使用单独的字典更有意义。

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

(如果您担心效率,那么无论哪种方式都不会产生太大的影响。在 5000 键字典中查找内容与在 10000 键字典中查找内容的速度只有非常非常小,而且它只是保存两个 5000 键字典比保存一个 10000 键字典花费很少的额外内存。所以,不要担心效率;做任何有意义的事情。我没有任何理由相信你担心效率,但是好像很多人问这样的问题,所以我只是覆盖基础。)

于 2013-05-13T22:01:39.183 回答
1

这是一个相当具体的情况,我怀疑在这种情况下该做什么有任何“官方”偏好。但是,我确实觉得拥有多种类型的键是“肮脏的”,尽管我真的想不出它的原因。

但是,由于您声明字符串键来自第三方,仅此一项就可能是拆分到另一个字典的好理由。我也会分裂。你永远不知道未来会带来什么,而且这种方法更容易维护。如果您考虑类型安全,也不太容易出错。

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

于 2013-05-13T22:01:55.010 回答
1

我会使用两个字典。一种将第 3 方键映射到整数键,另一种将整数键映射到对象。当然,根据您更频繁地使用哪一个,您可以切换它。

于 2013-05-13T22:04:32.157 回答