Python怎么合并字典组成的列表
这篇文章主要讲解了“Python怎么合并字典组成的列表”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python怎么合并字典组成的列表”吧!
成都创新互联长期为近千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为隆德企业提供专业的网站建设、做网站,隆德网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
最近做了个数据合并的需求这里记录下:
要求如下:
dict_of_list1 = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 20}]
dict_of_list2 = [{"name": "zhangsan", "province": "shandong"}, {"name": "lisi",
"province": "changsha"},
{"name": "xiaohong", "province": "guangxi"}, {"name": "wangwu",
"province": "xizang"}]
将上面的两个列表的字典进行合并将名字一样的项目放在一起。
形如:
[{"name":"zhangsan","age":18,"province":"shandong"},{"name":"xiaohong","province":"guangxi"}]
传统解法
dict_of_list1 = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 20}]dict_of_list2 = [{"name": "zhangsan", "province": "shandong"}, {"name": "lisi", "province": "changsha"}, {"name": "xiaohong", "province": "guangxi"}, {"name": "wangwu", "province": "xizang"}]all_data = dict_of_list1 + dict_of_list2d = {}for item in all_data: name = item["name"] if name in d: d[name].update(item) else: d[name] = itemresult = []for k,v in d.items(): result.append(v)sorted(v)print(result)
根据要求得知,我们需要根据姓名一样的进行合并,那么可以创建一个新的字典可以把姓名当作字典的键,然后判断这个键是否在这个字典中,如果不存在就是赋值,否则去更新其值。因为它的值是字典类型所以可以通过update进行更新,这种方法可以适用到其他语言。
下面再来一个python独有的解法。
通过分组函数
利用python标准库
from operator import itemgetter
from itertools import groupby
from collections import ChainMap
dict_of_list1 = [{"name": "zhangsan", "age": 18}, {"name": "lisi", "age": 19}, {"name": "wangwu", "age": 20}]
dict_of_list2 = [{"name": "zhangsan", "province": "shandong"}, {"name": "lisi",
"province": "changsha"},
{"name": "xiaohong", "province": "guangxi"}, {"name": "wangwu",
"province": "xizang"}]
key = itemgetter("name")
all_data = dict_of_list1 + dict_of_list2
all_data.sort(key=key)
result_list = []
for x, y in groupby(all_data, key=key):
d = dict(ChainMap(*y))
result_list.append(d)
sorted(result_list, key=key)
print(result_list)
我们可以使用itertools模块的groupby按照name进行分组
groupby有两个参数第一个是一个可迭代对象,第二个是指定按照什么去分组,类似我们排序时指定key的值,
这里key的值可以使用lambda表达式,或者使用标准库operator的itemgetter方法,实现相同的效果。
使用这个方法有一个要求那就是,需要提前对可迭代对象进行排序。
经过groupby修饰之后我们得到一个key和itertools._grouper
对象,key就是我们指定那个键的值,这里就是name的值,然后可以对itertools._grouper
对象进行拆分,得到几个字典,再通过collections的ChainMap对
其元素进行字典合并,之后转为dict对象。最终加入到指定列表完成我们的任务。
该方法主要是熟悉Python一些比较实用的标准库的用法。
感谢各位的阅读,以上就是“Python怎么合并字典组成的列表”的内容了,经过本文的学习后,相信大家对Python怎么合并字典组成的列表这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!
分享标题:Python怎么合并字典组成的列表
标题网址:http://scyanting.com/article/jiespd.html