Python:在多个dict数组中寻找共性

2024-09-30 20:25:17 发布

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

我有一系列的字典。我不知道这个列表中会有多少个dict,因为数据的结果是不同的。 我必须从中找出共同点。一旦我找到了共同点,我就必须合并那些具有相同值的dict,并计算出这些值的频率。你知道吗

这是示例数据。你知道吗

[
 { 
   "id": 100
   "category": null,
   "mid": null
 },
 {
   "id": 100
   "city": "roma"
  },
  { 
   "id": 100
   "category": null,
   "mid": null
 },
 {
   "id": 100
   "city": "roma"
  },
 {
   "id": 200
   "category": "red",
   "mid": null
  },
  {
   "id": 200
   "region": "toscany"
  },
 {
   "id": 300
   "category": "blue",
   "mid": "cold",
   "sub": null
  },
 {
   "id": 400
   "category": "yellow",
   "mid": "warm"
  },
 {
   "id": 400
   "city": "milano"
  }
 ]

而预期的结果应该是这样的。你知道吗

[
 { 
   "id": 100
   "category": null,
   "mid": null,
   "city": "roma"
   "count": 2
 },
 {
   "id": 200
   "category": "red",
   "mid": null,
   "region": "toscany",
   "count": 1
  },
 {
   "id": 300
   "category": "blue",
   "mid": "cold",
   "sub": null,
   "count": 1
  },
 {
   "id": 400
   "category": "yellow",
   "mid": "warm",
   "city": "milano",
   "count": 1
  }
 ]

我知道如何从两个dict中找出共同点,但不知道如何使用多个dict。也许我可以使用items()来找到相同的值,使用chainmap()来合并,但到目前为止,仍然没有得到预期的结果。你知道吗

编辑 当我只有两个字典的时候我做了什么。你知道吗

a={ 
   "id": 100,
   "category": null,
   "mid": null
 }
 b={
   "id": 100,
   "city": "roma"
  }
def grouping_records():
    rows.sort(key=itemgetter('id'))
    for date, items in groupby(rows, key=itemgetter('id')):
        print(id)
        for i in items:
                print(' ', i)

if __name__ == "__main__":
    grouping_records()

Tags: 数据idcity字典countitemsrednull
1条回答
网友
1楼 · 发布于 2024-09-30 20:25:17

groupby对我们很多人来说有点复杂,试试这个天真的解决方案吧

mylist = [dict(s) for s in set(frozenset(d.items()) for d in original)] # remove dublicate dictionaries if needed
ids = set([d['id'] for d in mylist])
id_cnt = {id: {"count": ids.count(id)} for id in ids }
for d in mylist:
     id = d['id']
     id_cnt[id].update(d)
result = id_cnt.values()

相关问题 更多 >