我有一个使用整数作为键的 Python 字典
d[7] = ...
引用自定义对象:
c = Car()
d[7] = c
但是,这些自定义对象中的每一个也有一个字符串标识符(来自第三方)。我希望能够使用整数或字符串访问对象。在同一个字典中使用两个键的首选方法是什么?
d[7] = c
d["uAbdskmakclsa"] = c
或者我应该把它分成两个字典?或者,还有更好的方法?
我有一个使用整数作为键的 Python 字典
d[7] = ...
引用自定义对象:
c = Car()
d[7] = c
但是,这些自定义对象中的每一个也有一个字符串标识符(来自第三方)。我希望能够使用整数或字符串访问对象。在同一个字典中使用两个键的首选方法是什么?
d[7] = c
d["uAbdskmakclsa"] = c
或者我应该把它分成两个字典?或者,还有更好的方法?
这真的取决于你在做什么。
如果您从不同的来源获得不同类型的键,那么您总是知道您正在查找哪种类型,那么从概念上讲,使用单独的字典更有意义。
另一方面,如果您需要能够处理任何一种键,使用单个字典可能更简单。否则,您需要编写类似使用类型切换的代码,或者尝试一个 dict 然后尝试另一个 on KeyError
,或者其他丑陋的东西。
(如果您担心效率,那么无论哪种方式都不会产生太大的影响。在 5000 键字典中查找内容与在 10000 键字典中查找内容的速度只有非常非常小,而且它只是保存两个 5000 键字典比保存一个 10000 键字典花费很少的额外内存。所以,不要担心效率;做任何有意义的事情。我没有任何理由相信你担心效率,但是好像很多人问这样的问题,所以我只是覆盖基础。)
这是一个相当具体的情况,我怀疑在这种情况下该做什么有任何“官方”偏好。但是,我确实觉得拥有多种类型的键是“肮脏的”,尽管我真的想不出它的原因。
但是,由于您声明字符串键来自第三方,仅此一项就可能是拆分到另一个字典的好理由。我也会分裂。你永远不知道未来会带来什么,而且这种方法更容易维护。如果您考虑类型安全,也不太容易出错。
为了在字典中设置值,您可以使用辅助方法。这将使添加更容易,并防止您忘记添加/更新到其中一个词典。
我会使用两个字典。一种将第 3 方键映射到整数键,另一种将整数键映射到对象。当然,根据您更频繁地使用哪一个,您可以切换它。