- 我的CSDN主页
- My Python 学习个人备忘录
- 我的博文推荐
合并列表中字典字段相同的值
昨天看到这个题目,感觉算法我会,简单。遍历列表,字典字段相同则合并(键位值累加),最后输出合并后的新列表。简单算法,用我自己的代码实现起来,就手足乱舞,很是不堪。最后勉强输出了题目要求,却也改变了原列表。以为我的代码错漏,全部抹除,“照搬”题目正解。run,我试着输出了原列表,发现也被更改。類我不想要这样子的结果!能不改变原列表实现输出符题?答案应该是肯定的。但昨晚,捣腾半夜,至寐不爽。若若
终于,今天被我磨出正果。
目录
- 题目
- 解题遇阻
- “复制”正解
- 磨出正解
- 加多字典元素
- 对齐输出
- 完整代码
练习题目
解题遇阻
“复制”正解代码 说明:正解不可复制代码,截屏图片部分代码看不全。
# #/sur/bin/nve python # coding: utf-8 import operator def set_list(): #函数对列表 *** 作,就是 *** 作原列表,不用传参 '''合并字典字段相同元素''' newlist.append(oldlist[0]) #追加老列表第一个元素到新列表 for old in range(1, len(oldlist)): for new in newlist: if operator.eq(new.keys(), oldlist[old].keys()): for key in new.keys(): new[key] += oldlist[old][key] break elif operator.eq(new, newlist[-1]): newlist.append(oldlist[old]) break #main codes oldlist = [ {'0-0': 0, '0-2': 0, '0-3': 1972}, {'3-3': 203, '3-2': 0, '3-1': 0, '3-0': 0}, {'0-0': 0, '0-2': 0, '0-3': 1450}, {'3-3': 203, '3-2': 0, '3-1': 0, '3-0': 0}, {'0-0': 0, '0-2': 0, '0-3': 1334}, ] newlist = [] #初始新列表为空 set_list() #调用自定义函数合并字典字段相同元素 line = '﹊'*21 #结果输出 print(f'nn原列表:n{line}n{oldlist}n{line}nnn合并字典字段相同元素后列表:n{line}n{newlist}n{line}n')代码运行效果 原列表已跟着更改,因为赋值 *** 作的本就是原列表中的字典。
被我磨出的“完美”代码
#/sur/bin/nve python # coding: utf-8 import operator #模块载入。 def set_list(): #函数对列表等可愿地更改的变量 *** 作,可以认为是“全局变量”,直接 *** 作就好。就是 *** 作原列表,不用传参。 '''合并字典字段相同元素''' temp = oldlist[:] #复制老列表。 while temp!=[]: #老列表副本删空,停止循环。 newlist.append(temp.pop().copy()) for i in temp: #遍历老列表副本,元素变化中,已处理字典(列表元素)被不断删除。 for j in newlist: #遍历新列表,元素增长中,不断加入已合并的字典。 if operator.eq(i.keys(), j.keys()): #这是新学到operator模块装逼,完全可以直接i.keys()==j.keys()。 for key in j.keys(): #遍历新列表字典元素字段。 j[key] += i[key] #相同字段值累加。 temp.remove(i) #temp是列表要用列表删除方法代码。字典列表的方法纠结不清,浪费了我一些大好光阴。 #main codes oldlist = [ {'0-0': 0, '0-2': 0, '0-3': 1972}, {'3-3': 203, '3-2': 0, '3-1': 0, '3-0': 0}, {'0-0': 0, '0-2': 0, '0-3': 1450}, {'3-3': 203, '3-2': 0, '3-1': 0, '3-0': 0}, {'0-0': 0, '0-2': 0, '0-3': 1334}, ] newlist = [] #初始化新列表为空。 set_list() #调用自定义函数合并字典字段相同元素 line = '﹊'*21 #结果输出之分割线变量 #一句式插值字符串格式化最后输出结果 print(f'nn原列表:n{line}n{oldlist}n{line}nnn合并字典字段相同元素后列表:n{line}n{newlist}n{line}n')代码运行效果
加多列表字典元素,一样“完美”。
把列表解析成插值字符串格式化的一个字符串,一个字典元素显示一行,优化显示。
oldlist = ''.join([f'{i}n' for i in oldlist]) #把列表解析成插值字符串格式化的一个字符串,一个字典元素显示一行,优化显示。 newlist = ''.join([f'{i}n' for i in newlist]) #把列表解析成插值字符串格式化的一个字符串,一个字典元素显示一行,优化显示。代码运行效果 这样子,就整齐多了。珞珞
python完整代码 (如果从语句注释不能清楚作用,请评论区留言指教和探讨。欄)
#/sur/bin/nve python # coding: utf-8 import operator #模块载入。 def set_list(): #函数对列表等可愿地更改的变量 *** 作,可以认为是“全局变量”,直接 *** 作就好。就是 *** 作原列表,不用传参。 '''合并字典字段相同元素''' temp = oldlist[:] #复制老列表。 while temp!=[]: #老列表副本删空,停止循环。 newlist.append(temp.pop().copy()) for i in temp: #遍历老列表副本,元素变化中,已处理字典(列表元素)被不断删除。 for j in newlist: #遍历新列表,元素增长中,不断加入已合并的字典。 if operator.eq(i.keys(), j.keys()): #这是新学到operator模块装逼,完全可以直接i.keys()==j.keys()。 for key in j.keys(): #遍历新列表字典元素字段。 j[key] += i[key] #相同字段值累加。 temp.remove(i) #temp是列表要用列表删除方法代码。字典列表的方法纠结不清,浪费了我一些大好光阴。 #main codes oldlist = [ {'0-0': 0, '0-2': 0, '0-3': 1972}, {'八爪章鱼': 285, '老男人': 0.3, '善良': 52}, {'a': 3, 'b': 5, 'c': 2, 'd': 9, 'e': 10}, {'八爪章鱼': 285, '老男人': 0.3, '善良': 52}, {'3-3': 203, '3-2': 0, '3-1': 0, '3-0': 0}, {'0-0': 0, '0-2': 0, '0-3': 1334}, {'a1': 3, 'b2': 5, 'c3': 2, 'd4': 9, 'e5': 10}, {'八爪章鱼': 285, '老男人': 0.3, '善良': 52}, {'a': 3, 'b': 5, 'c': 2, 'd': 9, 'e': 10}, {'0-0': 0, '0-2': 0, '0-3': 1450}, {'八爪章鱼': 285, '老男人': 0.3, '善良': 52}, {'3-3': 203, '3-2': 0, '3-1': 0, '3-0': 0}, {'八爪章鱼': 285, '老男人': 0.3, '善良': 52}, {'a1': 3, 'b2': 5, 'c3': 2, 'd4': 9, 'e5': 10} ] newlist = [] #初始化新列表为空。 set_list() #调用自定义函数合并字典字段相同元素 oldlist = ''.join([f'{i}n' for i in oldlist]) #把列表解析成插值字符串格式化的一个字符串,一个字典元素显示一行,优化显示。 newlist = ''.join([f'{i}n' for i in newlist]) #把列表解析成插值字符串格式化的一个字符串,一个字典元素显示一行,优化显示。 line = '﹊'*21 #结果输出之分割线变量 #一句式插值字符串格式化最后输出结果 print(f'nn原列表:n{line}n{oldlist}n{line}nnn合并字典字段相同元素后列表:n{line}n{newlist}n{line}n')
我的博文推荐:
- 尼姆游戏(聪明版/傻瓜式•人机对战)(当前阅读3213)(代码优化版)
- 练习:字符串统计(坑:f‘string‘报错)(当前阅读1183)
- 练习:求列表(整数列表)平衡点(当前阅读1602)
- 密码强度检测器(当前阅读1002)
- (当前阅读1298)
参考文章:
我用#CSDN#这个app发现了有技术含量的博客,小伙伴们求同去《一条语句定制输出(插值字符串格式化)》, 一起来围观吧
上一篇: 一条语句定制输出
下一篇:
精品文章:
- 正则表达式
- 通过内置对象理解python
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
来源:老齐教室
CSDN实用技巧博文:
- 8个好用到爆的Python实用技巧
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)