8

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

3 回答 3

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

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

于 2012-04-30T21:39:55.320 回答
1
dict([(h,h*2) for h in range(5)] + [(h,h2) for h,h2 in {'foo':'bar'}.items()])
于 2012-04-30T21:43:50.433 回答
0

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

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

于 2012-04-30T21:38:43.117 回答