簡體   English   中英

從dicts列表到具有相同值的dicts列表列表

[英]from list of dicts to list of lists of dicts with same values

我有一個dicts列表:

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分組的dicts列表?

所以我想將具有相同的關鍵UserID值的dicts分組到列表中。

我希望像這樣的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'}]]

首先根據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)
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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM