绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
盘点一个Python字典处理的基础题目--方法多多
2023-07-04 17:16:22

一、前言

前几天在Python强交流群【༺ཉི།།与歌同行ཉྀ༻】问了一个Python字典的处理问题,提问截图如下:



下面是他的元素数据。

a = [
    {'time': '8:30-9:30', 'content': '开场致词', 'speaker': [{'name': '李明', 'hs': '重庆附属永川'}]},
    {'time': '8:30-9:30', 'content': '开场致词', 'speaker': [{'name': '主*席:李伟', 'hs': '苏州附属院'}]},
    {'time': '8:30-9:30', 'content': '开场致词', 'speaker': [{'name': '王斌', 'hs': '佛山市院'}]}
    ]

想要达到预期的效果如下图所示:



二、实现过程

这里【甯同学】提供了一个代码,如下所示:



后来我自己也给了一个代码,代码如下:

a = [
    {'time': '8:30-9:30', 'content': '开场致词', 'speaker': [{'name': '李明', 'hs': '重庆附属永川'}]},
    {'time': '8:30-9:30', 'content': '开场致词', 'speaker': [{'name': '主*席:李伟', 'hs': '苏州附属院'}]},
    {'time': '8:30-9:30', 'content': '开场致词', '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': '开场致词'}
# new_lst.append(a[0][0])
final_dict = {**front_dict, **new_dict}
print(final_dict)



有些冗余,但是也是可以得到预期的效果的。

后来【甯同学】还使用Pandas秀了一把,如下所示:



后来【隔壁山楂】针对上面的两个代码,都做了一次优化,代码分别如下:

# 这个写成这样
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'))]



针对Pandas的写法,代码如下:

# 这个写成这样
import pandas as pd

pd.DataFrame(a).groupby(['time', 'content']).speaker.sum().reset_index().to_dict(orient='records')



简直太秀了!



三、总结

大家好,我是皮皮。这篇文章主要盘点了一个Python字典处理的问题,文中针对该问题给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。


分享好友

分享这个小栈给你的朋友们,一起进步吧。

Python
创建时间:2022-03-24 18:22:54
本小栈包含:Python基本教程 ,数据库基本教程,Python全栈,爬虫。以及Python的电子书分享等
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • 崔浩月1
    栈主

小栈成员

查看更多
  • Will9041
  • LCR_
  • updownup
戳我,来吐槽~