【发布时间】:2018-11-23 13:10:43
【问题描述】:
数据
我很好奇是否可以转换以下数据
old_data = {
"key0": [obj0, obj1],
"key1": [obj2, obj3]
}
到
data = {
"key0": [obj0.id, obj1.id],
"key1": [obj2.id, obj3.id]
}
使用字典理解。
所以基本上只是用对象本身的单个属性替换那些列表对象。所有对象都来自同一类型,因此肯定具有id 属性。
字典理解
我想出了以下不起作用的解决方案:
data = {
key: [obj.id]
for key, obj_list in old_data.items()
for obj in obj_list
}
问题
由于这一行,结果字典只包含只有一个值(迭代的最后一个值)的列表:
key: [obj.id]
每次只创建一个具有一个值的新列表。
所以我不想创建一个新列表,而是想 append new obj_ids 到现有列表,但我不知道如何。
我认为它一定看起来像这样:
key: data[key].append(obj.id)
但显然这也行不通,因为 data 尚未分配,即使它会:第一个 obj.id 无法附加,因为列表从未初始化。
(我使用的是 Python 3.7)
【问题讨论】:
-
{key: map(operator.attrgetter('id'), obj) for key, obj in old_data.items()}呢? -
@MatiasCicero 不知道这种可能性。我认为也应该有效。
标签: python dictionary list-comprehension dictionary-comprehension