我有这样的清单:
original_list = [
{
amenity: "Parking",
amount: 120,
version: 1,
percentage: 4,
id: 1
},
{
amenity: "Pool",
amount: 300,
version: 2,
percentage: 10,
id: 5,
},
{
amenity: "Pool",
amount: 200,
version: 1,
percentage: 10,
id: 2
}]
因此,正如您所看到的,列表中有两个具有舒适度的对象" Pool",如何根据舒适度将此列表分成较小的列表:
例如:
vlist_a = [{
amenity: "Parking",
amount: 120,
version: 1,
percentage: 4,
id: 1
}]
list_b = [{
amenity: "Pool",
amount: 300,
version: 2,
percentage: 10,
id: 5,
},
{
amenity: "Pool",
amount: 200,
version: 1,
percentage: 10,
id: 2
}]
我的目的是当我以这种方式命令它时,我可以使用lambda方程得到每个列表中具有最大版本的对象。
提前致谢
答案 0 :(得分:3)
使用字典表示可变数量的变量
Pythonic解决方案是使用collections.defaultdict
:
from collections import defaultdict
d = defaultdict(list)
for item in original_list:
d[item['amenity']].append(item)
print(d['Pool'])
[{'amenity': 'Pool', 'amount': 300, 'id': 5, 'percentage': 10, 'version': 2},
{'amenity': 'Pool', 'amount': 200, 'id': 2, 'percentage': 10, 'version': 1}]
print(d['Parking'])
[{'amenity': 'Parking', 'amount': 120, 'version': 1, 'percentage': 4, 'id': 1}]
我的意图是,当我以这种方式订购时,我可以得到它 每个列表使用lambda方程的最大版本的对象。
您可以将max
字典理解用于此任务:
res = {k: max(v, key=lambda x: x['version']) for k, v in d.items()}
{'Parking': {'amenity': 'Parking',
'amount': 120,
'id': 1,
'percentage': 4,
'version': 1},
'Pool': {'amenity': 'Pool',
'amount': 300,
'id': 5,
'percentage': 10,
'version': 2}}