Skip to main content
 首页 » 编程设计

python之在理解过程中检查字典中的键

2025年05月04日14lyhabc

是否可以这样做:

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]}) 
>>>