为了简单起见,我在一个列表中提供了2个列表,但实际上我在一个列表中处理了100个列表,每个列表都包含相当数量的词典。我只想获取第一个字典中'status'键的值,而不检查该列表中的任何其他字典(因为我知道它们在该键处都包含相同的值)。然后我将在每个大字典中执行某种类型的聚类。我需要有效地连接所有的'标题'值。有没有办法让我的代码更优雅、更快
我有:
nested = [
[
{'id': 287, 'title': 'hungry badger', 'status': 'High'},
{'id': 437, 'title': 'roadtrip to Kansas','status': 'High'}
],
[
{'id': 456, 'title': 'happy title here','status': 'Medium'},
{'id': 342,'title': 'soft big bear','status': 'Medium'}
]
]
我想:
result = [
{
'High': [
{'id': 287, 'title': 'hungry badger'},
{'id': 437, 'title': 'roadtrip to Kansas'}
]
},
{
'Medium': [
{'id': 456, 'title': 'happy title here'},
{'id': 342, 'title': 'soft big bear'}
]
}
]
我尝试的是:
for oneList in nested:
result= {}
for i in oneList:
a= list(i.keys())
m= [i[key] for key in a if key not in ['id','title']]
result[m[0]]=oneList
for key in a:
if key not in ['id','title']:
del i[key]
工作原理:
sum(nested,[])
将所有外部列表连接到一个大字典列表中groupby(, lambda x: x['status'])
按对象的状态属性对所有对象进行分组注意itertools.groupby返回一个生成器(不是一个列表),因此如果您想具体化生成器,您需要执行以下操作
可以为每个嵌套列表创建
defaultdict
:这将产生以下
result
:相关问题 更多 >
编程相关推荐