是否可以这样做:
l = [1, 2, 2, 3, 4, 4, 1, 1]
d = {num: [num] if num not in d else d[num].append(num) for num in l}
本质上,如果不先声明 d = {},我不会这么认为;即使那样,它也不会附加:
Output: {1: [1], 2: [2], 3: [3], 4: [4]}
# desired: {1: [1, 1, 1], 2: [2, 2], 3: [3], 4: [4, 4]}
可以使用 defaultdict,好奇是否可以理解?
请您参考如下方法:
不,这不可能。如果您考虑一下,就会明白为什么。当 Python 计算赋值语句时,它首先计算赋值语句的右侧——表达式。因为它还没有计算整个赋值,左边的变量还没有被添加到当前命名空间。因此,在计算表达式时,变量将是未定义的。
按照建议,您可以使用 collections.defaultdict 来完成您想要的:
>>> from collections import defaultdict
>>>
>>> l = [1, 2, 2, 3, 4, 4, 1, 1]
>>> d = defaultdict(list)
>>> for num in l:
d[num].append(num)
>>> d
defaultdict(<class 'list'>, {1: [1, 1, 1], 2: [2, 2], 3: [3], 4: [4, 4]})
>>>
