正在检查是整数范围的字典键

2024-04-18 20:09:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编一本制造商词典。它看起来像这样:

mfgs =     {17491: 'DS', 6543: 'AC'}

在这个场景中,我需要表示一系列整数,这些整数都指向同一个制造商。(例如1-99均由DC制造)

我已经看到你可以创建一个字典键来表示一个范围。在

^{pr2}$

稍后,我将从外部文件中获取一个整数。根据遇到的值,我将把相应的制造商记录到另一个文件中。在

我不清楚如何检查是否存在有效的键/值对(无论是一个数字还是一个数字范围),如果没有找到一个有效的键/值对(无论是一个数字还是一个数字范围),如果没有找到一个扩展的if/then来解释字典中定义的键,我就不清楚了。在

似乎try/except是合适的,但是如果遇到21,mfg[21]失败,也不应该失败


Tags: 文件if字典记录场景ds数字整数
2条回答

我找到了一个办法。请注意,我在那里是因为我们在for循环中迭代找到的项。mfgs是一个预先填充的词典。在

try:
    drivers_list[i]['mfg'] = mfgs[mfg] # Attempt to store in dictionary
except:
    if 1 <= mfg <= 31:   # On exception, see if it's the known mfg.
        drivers_list[i]['mfg'] = 'The known manufacturer'  # Between 1 and 31
    else:
        drivers_list[i]['mfg'] = 'Unknown' # otherwise post unknown

你需要的不仅仅是一个简单的hashmap(即字典)查找。Hashmaps查找特定的键,而不是一个键是否在任何现有键的范围内。在

你有两个简单的选择。在

  1. 如果您提前知道范围,请在查找前将整数转换为一个范围:

    def range_from_id(manufacturer_id):
        if 1 <= manufacturer_id <= 99:
            return (1, 99)
        return manufacturer_id
    
    manufacturer_id = ... from file ...
    manufacturer_range = range_from_id(manufacturer_id)
    manufacturer = mfgs.get(manufacturer_range, "Unknown")
    
  2. 如果没有,则在单独的字典中跟踪范围,并循环查看所有可能的值:

    ^{pr2}$

    如果速度很重要,请注意此选项将采用O(n),其中n是您拥有的范围数。更恰当的方法是使用二叉树,如amit answered here。这需要使用第三方库,如bintrees

相关问题 更多 >