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

Create dictionary comprehension from list with condition syntax

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

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

你不能为此使用字典理解。对于每个迭代步骤(如果未过滤),都会生成一个新的键值对。这意味着您无法更新另一个已生成的键值对

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

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

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