在python 3.5中,我们可以通过使用双splat解包来合并dicts
>>> d1 = {1: 'one', 2: 'two'}
>>> d2 = {3: 'three'}
>>> {**d1, **d2}
{1: 'one', 2: 'two', 3: 'three'}
Run Code Online (Sandbox Code Playgroud)
凉.但它似乎没有概括为动态用例:
>>> ds = [d1, d2]
>>> {**d for d in ds}
SyntaxError: dict unpacking cannot be used in dict comprehension
Run Code Online (Sandbox Code Playgroud)
相反,我们必须这样做reduce(lambda x,y: {**x, **y}, ds, {}),这似乎更加丑陋.为什么解析器不允许"一种明显的方法",当表达式中似乎没有任何歧义时?
python dictionary syntax-error python-3.5 dict-comprehension
是否有可能使用else的语句(如果是,怎么样?)的dictcomp?
这是不可能使用else的理解本身的一部分(见本),但至少在list和set内涵,可以使用conditional_expression(见本)。
的一个例子listcomp是here。
我的示例代码是:
converters = {"id": int}
rows = [{"id": "1", "name": "foo"}, {"id": "2", "name": "bar"}]
for row in rows:
row = {k: converters[k](v) if k in converters else k:v for k,v in row.items()}
print(row)
Run Code Online (Sandbox Code Playgroud)
这不起作用。
奇怪的部分是
row = {k: converters[k](v) if k in converters for k, v in row.items()} 也不起作用,虽然它应该没问题。
row = {k: converters[k](v) for k, v …