我做了一个更复杂问题的小演示
def f(a):
return tuple([x for x in range(a)])
d = {}
[d['1'],d['2']] = f(2)
print d
# {'1': 0, '2': 1}
# Works
现在假设密钥是以编程方式生成的 我如何在这种情况下实现同样的目标?
n = 10
l = [x for x in range(n)]
[d[x] for x in l] = f(n)
print d
# SyntaxError: can't assign to list comprehension
答案 0 :(得分:1)
你不能,它是赋值语句的语法特征。如果你做了一些动态的事情,那么它将使用不同的语法,因此无法工作。
如果您有一些函数结果<tr ng-repeat="book in books | filter:query ">
和一个键列表f()
,您可以使用keys
创建一个可迭代的键和结果,然后循环它们:
zip
这很容易被改写成字典理解:
d = {}
for key, value in zip(keys, f()):
d[key] = value
或者,在@JonClements提到的这种特殊情况下,即使是
d = {key: value for key, value in zip(keys, f())}