从dict列表到具有相同值的dict列表

2024-09-27 00:17:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一张单子:

dict_list = [{'Id': 0, 'UserID': 1, 'Name': 'John'},
             {'Id': 1, 'UserID': 2, 'Name': 'Martin'},
             {'Id': 2, 'UserID': 1, 'Name': 'Rob'},
             {'Id': 3, 'UserID': 1, 'Name': 'Neil'},
             {'Id': 4, 'UserID': 2, 'Name': 'Bill'}]

如何创建按键UserID分组的dict列表?你知道吗

所以我想将具有相同keyUserID值的dict分组到列表中。你知道吗

我希望smth是这样的:

[[{'Id': 0,'UserID': 1, 'Name': 'John'},
  {'Id': 2,'UserID': 1, 'Name': 'Rob'},
  {'Id': 3,'UserID': 1, 'Name': 'Neil'}],
 [{'Id': 1,'UserID': 2, 'Name': 'Martin'}, 
  {'Id': 4,'UserID': 2, 'Name': 'Bill'}]]

Tags: nameid列表johndict按键list单子
3条回答
from itertools import groupby
dict_list = [{'Id': 0, 'UserID': 1, 'Name': 'John'},
             {'Id': 1, 'UserID': 2, 'Name': 'Martin'},
             {'Id': 2, 'UserID': 1, 'Name': 'Rob'},
             {'Id': 3, 'UserID': 1, 'Name': 'Neil'},
             {'Id': 4, 'UserID': 2, 'Name': 'Bill'}]
res =[list(group) for _,group in groupby(sorted(dict_list, key=lambda f: f['UserID']), lambda f: f['UserID'])]
print(res)

首先根据UserIDdict_list排序,然后使用itertools.groupby根据UserID对结果进行分组

>>> from itertools import groupby
>>> key = lambda d: d['UserID']
>>> res = [list(grp) for _,grp in groupby(sorted(dict_list, key=key), key)]
>>> 
>>> pprint(res)
[[{'Id': 0, 'Name': 'John', 'UserID': 1},
  {'Id': 2, 'Name': 'Rob', 'UserID': 1},
  {'Id': 3, 'Name': 'Neil', 'UserID': 1}],
 [{'Id': 1, 'Name': 'Martin', 'UserID': 2},
  {'Id': 4, 'Name': 'Bill', 'UserID': 2}]]

也可以这样使用列表理解:

dict_list = [{'Id': 0, 'UserID': 1, 'Name': 'John'},
         {'Id': 1, 'UserID': 2, 'Name': 'Martin'},
         {'Id': 2, 'UserID': 1, 'Name': 'Rob'},
         {'Id': 3, 'UserID': 1, 'Name': 'Neil'},
         {'Id': 4, 'UserID': 2, 'Name': 'Bill'}]

user_ids=set([x['UserID'] for x in dict_list])
result_list=[]
for user_id in user_ids:
    user_id_list = [x for x in dict_list if x['UserID']==user_id]
    result_list.append(user_id_list)

print(result_list)

相关问题 更多 >

    热门问题