【问题标题】:Is it bad practice to use two dictionaries with the same values but different keys for lookup使用两个具有相同值但不同键的字典进行查找是不好的做法吗
【发布时间】:2021-03-30 05:49:30
【问题描述】:

我知道字典在查找键时速度很快,但如果让两个字典指向完全相同的对象但具有不同但相关的键以便您可以使用那些以不同方式查找元素的键。在我的应用程序中,查找速度比安排数据集的时间更重要。

例如:您有一个包含驾照信息的大型集合。您将信息存储在字典中,密钥是驾驶执照上各自的名称。您还创建了第二个字典,指向与密钥相同的对象,但以驾驶执照 ID 号作为密钥

class DL:
    def __init__(self, name, id):
        self.name = name
        self.id = id

licenses = {DL('jon', 1), DL('joe', 2), DL('jack', 3), DL('jill', 4)}
byName = dict()
byID = dict()

for i in licenses:
    byName[i.name] = i
    byID[i.id] = i 

print(byName)
print(byID)

【问题讨论】:

  • 看看能否解决你的问题:stackoverflow.com/questions/11105115/…
  • @KenLee 这实际上只是两个字典...
  • 这是一个权衡。是否值得取决于您的项目要求。
  • 嗯,根据我的要求,我不知道是否值得。我想要尽可能快的查找,这提供了我认为但要付出什么代价。有多少 dict + 它的数据将是 dict。除了懒惰和方便之外,是什么阻止我对对象中的每个属性执行此操作。
  • 不,这不是坏习惯,这很好。如果需要同步,请明智地将它们打包在一起。

标签: python python-3.x performance dictionary memory


【解决方案1】:

从时间复杂度的角度来看,一个与两个字典不会显着影响算法的速度。它们仍然是哈希图,这意味着最坏情况 O(N) 查找与平均情况 O(1) 查找。

在此处阅读有关 python 字典时间复杂度的更多信息:https://wiki.python.org/moin/TimeComplexity

需要注意的是,Python 对整数和字符串有高度优化的哈希函数,所以如果你发现自己编造了一些自定义的东西来支持单个字典,这可能是一个坏主意。

如果绝对性能对您很重要,那么您的轻而易举的改进可能在别处。

【讨论】:

    猜你喜欢
    • 2013-05-07
    • 1970-01-01
    • 2016-01-09
    • 2011-11-16
    • 1970-01-01
    • 2021-12-15
    • 2015-09-03
    • 2014-04-27
    • 1970-01-01
    相关资源
    最近更新 更多