如何为使用生成器参数构造的dict()添加额外的键值对?

时间:2012-04-30 21:35:06

标签: python syntax

可以使用生成器(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' }

3 个答案:

答案 0 :(得分:16)

构造

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'}

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

答案 1 :(得分:1)

dict([(h,h*2) for h in range(5)] + [(h,h2) for h,h2 in {'foo':'bar'}.items()])

答案 2 :(得分:0)

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

但是,以简单的方式执行此操作可能更为清晰:一次调用dict然后明确添加额外的项目。