作者:Python進(jìn)階者
來源:Python爬蟲與數(shù)據(jù)挖掘
一、前言
前幾天在Python最強(qiáng)王者交流群【?????與歌同行???】問了一個(gè)Python字典的處理問題,提問截圖如下:
下面是他的元素?cái)?shù)據(jù)。
a = [
{'time': '8:30-9:30', 'content': '開場(chǎng)致詞', 'speaker': [{'name': '李明', 'hs': '重慶附屬永川'}]},
{'time': '8:30-9:30', 'content': '開場(chǎng)致詞', 'speaker': [{'name': '主席:李偉', 'hs': '蘇州附屬院'}]},
{'time': '8:30-9:30', 'content': '開場(chǎng)致詞', 'speaker': [{'name': '王斌', 'hs': '佛山市院'}]}
]
想要達(dá)到預(yù)期的效果如下圖所示:
二、實(shí)現(xiàn)過程
這里【甯同學(xué)】提供了一個(gè)代碼,如下所示:
后來我自己也給了一個(gè)代碼,代碼如下:
a = [
{'time': '8:30-9:30', 'content': '開場(chǎng)致詞', 'speaker': [{'name': '李明', 'hs': '重慶附屬永川'}]},
{'time': '8:30-9:30', 'content': '開場(chǎng)致詞', 'speaker': [{'name': '主席:李偉', 'hs': '蘇州附屬院'}]},
{'time': '8:30-9:30', 'content': '開場(chǎng)致詞', 'speaker': [{'name': '王斌', 'hs': '佛山市院'}]}
]
new_dict = {}
new_lst = [] for item in a:
new_dict.setdefault('speaker', []).append(item['speaker']) # print(new_dict) front_dict = {'time': '8:30-9:30', 'content': '開場(chǎng)致詞'} # new_lst.append(a[0][0]) final_dict = {**front_dict, **new_dict} print(final_dict)
有些冗余,但是也是可以得到預(yù)期的效果的。
后來【甯同學(xué)】還使用Pandas秀了一把,如下所示:
后來【隔壁山楂】針對(duì)上面的兩個(gè)代碼,都做了一次優(yōu)化,代碼分別如下:
# 這個(gè)寫成這樣 from itertools import groupby from operator import itemgetter
[dict(zip(('time', 'content', 'speaker'),
(*key, sum([i['speaker'] for i in value], [])))) for key, value in groupby(a, itemgetter('time', 'content'))]
針對(duì)Pandas的寫法,代碼如下:
# 這個(gè)寫成這樣 import pandas as pd pd.DataFrame(a).groupby(['time', 'content']).speaker.sum().reset_index().to_dict(orient='records')
簡直太秀了!
三、總結(jié)
大家好,我是皮皮。這篇文章主要盤點(diǎn)了一個(gè)Python字典處理的問題,文中針對(duì)該問題給出了具體的解析和代碼實(shí)現(xiàn),幫助粉絲順利解決了問題。
完 謝謝觀看