使用条件语法从列表创建字典理解

时间:2017-09-19 15:32:46

标签: python dictionary dictionary-comprehension

我想使用字典理解语法创建字典。

请注意,列表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

1 个答案:

答案 0 :(得分:5)

您无法使用词典理解。对于每个迭代步骤(如果未过滤),将生成新的键值对。这意味着您无法更新另一个已生成的键值对

坚持循环。您可以使用dict.setdefault()简化它:

d = {}
for entry in l:
    d.setdefault(entry[0], []).append(entry)

请注意,在字典理解完成之前,示例中的d将不存在;只有这样才会d绑定到结果。更具体地说,解决了语法错误,Python将:之前的部分视为单独的表达式,以在键值对中生成键,并且for ... in ...语法被解析为生成器表达式(一种理解语法);您可以在此类表达式中使用if进行过滤,但在理解中不存在else部分,因此错误指向else