我想使用字典理解语法创建字典。
请注意,列表l
包含字符串和元组的元组,第一个元素始终是时间戳。
这有效:
d = {}
for entry in l:
if entry[0] not in d:
d[entry[0]] = []
d[entry[0]].append(entry)
这不起作用:
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
答案 0 :(得分:5)
您无法使用词典理解。对于每个迭代步骤(如果未过滤),将生成新的键值对。这意味着您无法更新另一个已生成的键值对。
坚持循环。您可以使用dict.setdefault()
简化它:
d = {}
for entry in l:
d.setdefault(entry[0], []).append(entry)
请注意,在字典理解完成之前,示例中的d
将不存在;只有这样才会d
绑定到结果。更具体地说,解决了语法错误,Python将:
之前的部分视为单独的表达式,以在键值对中生成键,并且for ... in ...
语法被解析为生成器表达式(一种理解语法);您可以在此类表达式中使用if
进行过滤,但在理解中不存在else
部分,因此错误指向else
。