【问题标题】:How to construct a defaultdict from a dictionary?如何从字典中构造一个 defaultdict?
【发布时间】:2011-11-24 05:51:34
【问题描述】:

如果我有d=dict(zip(range(1,10),range(50,61))),我如何从dict 中构建collections.defaultdict

defaultdict 唯一的参数似乎是工厂函数,我是否必须初始化然后通过原始d 并更新defaultdict

【问题讨论】:

    标签: python dictionary


    【解决方案1】:

    您可以使用可调用对象创建带有字典的 defaultdict。

    from collections import defaultdict
    
    def dict_():
        return {'foo': 1}
    
    defaultdict_with_dict = defaultdict(dict_)
    

    【讨论】:

      【解决方案2】:

      您可以通过将 dict 作为第二个参数传递来从 dict 构造一个 defaultdict。

      from collections import defaultdict
      
      d1 = {'foo': 17}
      d2 = defaultdict(int, d1)
      
      print(d2['foo'])  ## should print 17
      print(d2['bar'])  ## should print 1 (default int val )
      

      【讨论】:

      • 您使用的是哪个版本的 Python?我在 Python 3.8.3 中的默认 int val 是 0,而不是 1。
      【解决方案3】:

      Read the docs:

      第一个参数为 default_factory 提供初始值 属性;它默认为无。 处理所有剩余的参数 就像它们被传递给 dict 构造函数一样,包括 关键字参数。

      from collections import defaultdict
      d=defaultdict(int, zip(range(1,10),range(50,61)))
      

      或者给定字典d

      from collections import defaultdict
      d=dict(zip(range(1,10),range(50,61)))
      my_default_dict = defaultdict(int,d)
      

      【讨论】:

      • 是否可以为嵌套字典扩展这种方法?以下内容无法按预期工作:default_dict = defaultdict(None,{"a":1,"b":{"c":3}}) 例如default_dict["e"] 引发 KeyError 而不是返回 None
      • @alancalvitti 那是因为传递 None 并不意味着它会为未知键生成 None,它根本不会使用一个。你需要做defaultdict(lambda: None, {....})
      猜你喜欢
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2019-12-06
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多