在python中使用itertools按键创建新列表分组有困难

在python中使用itertools按键创建新列表分组有困难,python,python-3.x,Python,Python 3.x,我有如下字典清单 dataset={"users": [ {"id": 20, "loc": "Chicago", "st":"4", "sectors": [{"sname": "Retail"}, {"sname": "Manufacturing"}, {"sname": null}]}, {"id": 21, "loc": "Frankfurt", "st":"4", "sectors": [{"sname": null}]}, {"id": 22, "loc"

我有如下字典清单

dataset={"users": [
    {"id": 20, "loc": "Chicago", "st":"4", "sectors": [{"sname": "Retail"}, {"sname": "Manufacturing"}, {"sname": null}]}, 
    {"id": 21, "loc": "Frankfurt", "st":"4", "sectors": [{"sname": null}]}, 
    {"id": 22, "loc": "Berlin", "st":"6", "sectors": [{"sname": "Manufacturing"}, {"sname": "Banking"},{"sname": "Agri"}]}, 
    {"id": 23, "loc": "Chicago", "st":"2", "sectors": [{"sname": "Banking"}, {"sname": "Agri"}]},
    {"id": 24, "loc": "Bern", "st":"1", "sectors": [{"sname": "Retail"}, {"sname": "Agri"}]},
    {"id": 25, "loc": "Bern", "st":"4", "sectors": [{"sname": "Retail"}, {"sname": "Agri"}, {"sname": "Banking"}]}
    ]}
我尝试在下面的代码中删除上面列表中的loc和扇区 这样我的列表将只包含id和loc

fs_loc = []
for g, items in itertools.groupby(data['users'], lambda x: (x['id'],x['loc'])):
    fs_loc.append({ 'id': g[0], 'loc': g[1] })
print(fs_loc)
在此基础上,我如何创建新列表,使其具有id列表和按如下位置分组的id计数

{"locations": [
    {"loc": "Chicago","count":2,"ids": [{"id": "20"}, {"id": "23"}]}, 
    {"loc": "Bern","count":2,"ids": [{"id": "24"}, {"id": "25"}]}, 
    {"loc": "Frankfurt","count":1,"ids": [{"id": "21"}]}, 
    {"loc": "Berlin","count":1,"ids": [{"id": "21"}]}    
    ]}

我发现在使用itertools制作上述列表时存在困难,可能我缺少了实现上述目标的更好方法,请您建议。

您需要将排序序列传递给
itertools.groupby

根据:

。。。 通常,iterable需要已经在同一个键上排序 功能

groupby()的操作类似于Unix中的uniq筛选器。信息技术 每次更改键的值时生成一个中断或新组 函数更改(这就是为什么通常需要进行排序 使用同一按键功能的数据)。这种行为不同于 SQL的组,通过该组聚合公共元素,而不考虑其属性 输入顺序


fs\u loc

[
    {'count': 1, 'loc': 'Berlin', 'ids': [22]},
    {'count': 2, 'loc': 'Bern', 'ids': [24, 25]},
    {'count': 2, 'loc': 'Chicago', 'ids': [20, 23]},
    {'count': 1, 'loc': 'Frankfurt', 'ids': [21]}
]

谢谢!我现在就来试试这个嗨falsetru!我有一个问题,我们可以在grp中添加id为的st值吗?我尝试了fs_loc=[{'loc':loc,'ids':[x['id'],x['st']代表grp中的x],'count':len(grp)}代表loc,grp中的grp]这是一个抛出错误,你能建议一下吗?fs_loc应该有'ids':[{id,st},{id,st}]。。可能是这样吗?@SathishPanduga,你能不能单独提出一个问题,并给出确切的预期结果?(输出应该是有效的python文本)@SathishPanduga,我要睡觉了。因此,回应需要很长时间。但是有一个单独的问题,其他人可以看到并帮助你解决问题。
[
    {'count': 1, 'loc': 'Berlin', 'ids': [22]},
    {'count': 2, 'loc': 'Bern', 'ids': [24, 25]},
    {'count': 2, 'loc': 'Chicago', 'ids': [20, 23]},
    {'count': 1, 'loc': 'Frankfurt', 'ids': [21]}
]