【发布时间】:2020-12-11 11:27:23
【问题描述】:
我正在尝试使用 list/dict comprehension 简化以下代码,我想在其中从列表构建列表字典。
在本例中,我将每个项目的 mod(或任何其他功能)作为键。如果字典中不存在该键,则创建一个新列表并将该项目附加到列表中,否则直接附加该项目。
def get_key(val):
return val % 3 # Can be something else, it doesn't matter
dict = {}
data = [i for i in range(10)]
for item in data:
key = get_key(item)
if key in dict:
dict[key].append(item)
else:
dict[key] = [item]
print(dict)
预期输出
{0: [0, 3, 6, 9], 1: [1, 4, 7], 2: [2, 5, 8]}
为了简化上面的代码,我尝试了这种丑陋的做法:
for item in data:
key = get_key(item)
dict[key] = [item] if key not in dict else (dict[key], dict[key].append(item))[0]
但是,如何在没有 for 循环的情况下使用 list/dict 理解作为单个表达式来实现相同的目标?
我可以想到这样的事情,但它无法将值附加到预先存在的列表中。
{get_key(item):[item] for item in data}
相关帖子:
- Create a dictionary with list comprehension
- if/else in a list comprehension(注意:我在想条件表达式可能会起作用,但不确定如何将它与表达式结合起来)
【问题讨论】:
标签: python dictionary list-comprehension