我有:
[
{'id': 1, 'name': 'foo'},
{'id': 2, 'name': 'bar'},
{'id': 1, 'name': 'gesiel'}
]
我想要:
{
1: [
{'id': 1, 'name': 'foo'},
{'id': 1, 'name': 'gesiel'}
],
2: [
{'id': 2, 'name': 'bar'}
]
}
此代码执行以下操作:
organized = {d['id']:[] for d in data}
[organized[d['id']].append(d) for d in data]
有没有更像Python的方法?你知道吗
使用^{} :
使用groupby.iter工具我们可以创建这个
或使用词典理解
如果您像这里一样处理内存中的对象,那么2-passo(n)解决方案没有什么问题。代码的主要问题是您误用了列表理解。你知道吗
列表理解应该用来构造一个新的列表,而不是在循环中处理一个就地函数或方法。以您的示例为例,您的逻辑将创建一个如下所示的列表:
理解的副作用意味着
organized
值会根据需要添加项。相反,您可以使用一个简单的for
循环重写:通过而不是通过初始迭代添加键,可以提高逻辑的效率。这个常见问题由^{} 解决,如@Austin's solution。此解决方案为不存在的任何键提供空列表:
因为
defaultdict
是dict
的子类,所以通常不需要将其转换回常规字典。你知道吗相关问题 更多 >
编程相关推荐