自动更新键到整数映射的字典

时间:2018-02-09 00:41:00

标签: python dictionary

我有一个类似的功能:

def GetMapping(mappings, key):
    mapping = mappings.get(key)

    if mapping is None:
        currentMax = mappings.get("max", 0)
        mapping = currentMax + 1
        mappings["max"] = mapping
        mappings[key] = mapping

    return mapping, mappings

基本上,给定字典mappings和密钥key,该函数返回与密钥相关联的值(如果存在)。

如果没有,它会在字典中找到当前最大ID,存储在键“最大”下,将其分配给此键,并更新最大值

我想知道是否有内置/不那么详细的方法来实现这个目标?

2 个答案:

答案 0 :(得分:7)

您可以继承dict并覆盖__missing__方法。

class CustomMapping(dict):
     def __missing__(self, key):
         self[key] = self['max'] = self.get('max', 0) + 1
         return self[key]

d = CustomMapping()
d['a']  # 1
d['b']  # 2
d['a']  # 1
d       # {'a': 1, 'b': 2, 'max': 2}

正如@ Code-Apprentice指出的那样,最好在max方法中设置__init__属性。这避免了潜在的密钥冲突(即恰好命名为"max"的密钥)。

答案 1 :(得分:0)

假设您实际上不需要/希望从外部控制$sql = "SELECT count(*) FROM students"; $result = mysqli_query($conn, $sql); $student= mysqli_fetch_assoc($result); 项,而只是自动递增ID:

'max'

演示:

    defaultdict(count(1).next)