【问题标题】:use map/lambda to create dicts使用 map/lambda 创建字典
【发布时间】:2018-08-20 22:46:59
【问题描述】:

这是我的代码:

 a = {}
 ins = ["foo", "bar"]
 for i in ins:
     a[i] = {}

输出

{'foo': {}, 'bar': {}}

基本上,我想为列表中的每个项目创建一个字典。 有什么方法可以使用 map 或 lambda 以更简洁的方式做到这一点?

【问题讨论】:

    标签: python python-3.x dictionary lambda


    【解决方案1】:

    正确的做法不是基于maplambda,而是简单的dict comprehension

    ins = ["foo", "bar"]
    a = {x: {} for x in ins}
    

    您可以像这样使用maplambda 来做到这一点:

    a = dict(map(lambda x: (x, {}), ins))
    

    但这比直接的dict 理解更慢且更冗长。

    如果您的关联值是不可变的,那么 the dict.fromkeys alternate constructor 将是一个很好的解决方案,但它每次都会重用默认值,因此如果您将其与默认值 {} 一起使用,它将使所有键都引用相同 dict,通过一键修改它会改变所有其他:

    a = dict.fromkeys(ins, 0)  # GOOD! int is immutable
    
    a = dict.fromkeys(ins, {})  # BAD! dict is mutable
    

    最后,在许多此类情况下,一个不错的选择是use collections.defaultdict 在您访问(以前)不存在的密钥时提供默认值。这样,您就可以这样做:

    from collections import defaultdict
    a = defaultdict(dict)
    

    通过括号语法访问任何键(来自ins 或不来自ins)将在首次访问时为其分配一个值dict()(相当于{})。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多