【问题标题】:How to add extra key-value pairs to a dict() constructed with a generator argument?如何向使用生成器参数构造的 dict() 添加额外的键值对?
【发布时间】:2012-05-10 13:53:13
【问题描述】:

可以使用生成器创建字典 (PEP-289):

dict((h,h*2) for h in range(5))
#{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}

在同一个 dict() 调用中是否可以在语法上添加一些额外的键值对?以下语法不正确,但更好地解释了我的问题:

dict((h,h*2) for h in range(5), {'foo':'bar'})
#SyntaxError: Generator expression must be parenthesized if not sole argument

换句话说,是否可以在单个 dict() 调用中构建以下内容:

{0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 'foo': 'bar' }

【问题讨论】:

    标签: python syntax


    【解决方案1】:

    您可以使用itertools.chain(请参阅Concatenate generator and item)将您的额外内容添加到您对dict() 的调用中。

    不过,用简单的方法可能更清楚:调用dict,然后显式添加额外的项目。

    【讨论】:

      【解决方案2】:

      构造函数:

      dict(iterableOfKeyValuePairs, **dictOfKeyValuePairs)
      

      例子:

      >>> dict(((h,h*2) for h in range(5)), foo='foo', **{'bar':'bar'})
      {0: 0, 1: 2, 2: 4, 3: 6, 4: 8, 'foo': 'foo', 'bar': 'bar'}
      

      (请注意,如果不是唯一的参数,则需要将生成器表达式括起来。)

      【讨论】:

        【解决方案3】:
        dict([(h,h*2) for h in range(5)] + [(h,h2) for h,h2 in {'foo':'bar'}.items()])
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-07-20
          • 1970-01-01
          • 1970-01-01
          • 2023-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多