pta*_*tay -1 python dictionary dictionary-comprehension
我想用字典理解语法创建一个字典.
请注意,列表l
包含字符串和元组的元组,第一个元素始终是时间戳.
这有效:
d = {}
for entry in l:
if entry[0] not in d:
d[entry[0]] = []
d[entry[0]].append(entry)
Run Code Online (Sandbox Code Playgroud)
这不起作用:
d = {k[0].append(k) for k in l if k[0] in d else k[0]:k for k in l}
File "<stdin>", line 1
d = {k[0].append(k) for k in l if k[0] in d else k[0]:k for k in l}
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
你不能使用词典理解.对于每个迭代步骤(如果未过滤),将生成新的键值对.这意味着您无法更新另一个已生成的键值对.
坚持循环.你可以用dict.setdefault()
以下方法简化它:
d = {}
for entry in l:
d.setdefault(entry[0], []).append(entry)
Run Code Online (Sandbox Code Playgroud)
请注意,d
在字典理解完成之前,您的示例将不存在; 只有这样d
才能结果.更具体地说,解决了语法错误,Python将:
作为单独表达式的部分视为在键值对中生成键,并且for ... in ...
语法被解析为生成器表达式(一种理解语法形式); 你可以if
在这样的表达式中使用来过滤,但是else
在理解中没有可能的部分,因此错误指向else
那里.