Defaultdict 返回键作为默认值

Jac*_*yer 2 python dictionary

假设您在下面定义了一个名为 mydict 的字典,并且您寻找一个名为“D”的键。

mydict = {'A':'a',
          'B':'b',
          'C':'c'}
mydict['D']
Run Code Online (Sandbox Code Playgroud)

所需的输出应该是“D”,即您输入的确切输出。有没有办法用默认字典来做到这一点?

mar*_*eau 6

正如我在评论中提到的,您可以定义自己的字典子类来执行您想要的操作(只是回显缺少的键 \xe2\x80\x94 它不会添加它们):

\n
class MyDefaultDict(dict):\n    def __missing__(self, key):\n        return key\n\n\nmydict = MyDefaultDict({\'A\':\'a\',\n                        \'B\':\'b\',\n                        \'C\':\'c\'})\n\nprint(f"{mydict[\'D\']=}")  # -> mydict[\'D\']=\'D\'\n\n
Run Code Online (Sandbox Code Playgroud)\n

  • 在重要的时候进行微优化:删除“self”参数(因为你没有用它),并用“@staticmethod”修饰“__missing__”的定义。将查找丢失密钥的成本降低约 25%(在 WSLv2 下的 Alpine Linux 上运行的 CPython 3.9.7 上测试)。 (3认同)
  • @Mark:是的,这个钩子正是为了允许“dict”子类(例如“Counter”、“defaultdict”)处理丢失的键,而不会减慢键查找的核心代码路径。`dict` 的默认 `__getitem__` 是在查找失败时调用 `__missing__` 作为引发 `KeyError` 之前的后备选项。 (2认同)

azr*_*zro 5

Acollection.defaultdict用于获取值的工厂,因此在设置一对时,也不在获取它时

只需使用dict.get

mydict = {'A':'a','B':'b','C':'c'}
print(mydict.get('A', 'A'))  # a
print(mydict.get('D', 'D'))  # D
Run Code Online (Sandbox Code Playgroud)