今天开始改变写博客风格,其他不多说.

今天题目如下:

# 7、写函数,完成以下功能: (8分)
# 例如有:
# user_list=[
# {"name": "alex","hobby":"抽烟"},
# {"name" :"alex","hobby":"喝酒"},
# {"name" :"alex","hobby":"烫头"},
# {"name":"wusir","hobby":"喊麦"},
# {"name":"wusir","hobby":"街舞"},
# ]
# 编写函数处理user_list 并返回如下结果:
# [{"name":"alex","hobby_list": ["抽烟","喝酒","烫头"]},
# {"name":"wuhir","hobby_list": ["喊麦","街舞"]},]

我先写自己的写程序的方法,先直接看正确完整的代码直接往下看

一开始看了题目,我发现的规律是"alex"、"name"、"hobby"由多个变成一个

因此我想到了用set集合去重

我是想要把user_list列表的键收集起来变成列表,然后通过set集合去重

但是走到下面代码的时候发现无法再下手写代码,我想知道我这样的思路错在哪里了

dict={}
list=[]
for a in user_list:
# print(a)
for k,v in a.items():
# print(k,v)
dict.setdefault(k,[]).append(v)
for b,c in dict.items():
print(b,c)
print(dict)

上面的难题卡了我两三个小时,卡在我一直把'name'和'hobby'设置成一个变量,导致感觉变量太多,无法下手(小声逼逼:不知道是不是这个原因)

如果不是我说的原因,我想知道问题出在哪里

所以我想了很久想不出来,然后去百度找,找到下面的代码,但是我也没有看懂

result = []     # {'name': 'alex', 'hobby_list': ['抽烟']}
for user in user_list:
# 1.对空列表进行for循环,判断是否在result里面存在了这个人, 如果存在. 把hobby_list添加一个hobby
# 2.不存在. 创建一个新字典
for new_user in result:
if user['name'] == new_user['name']:
new_user['hobby_list'].append(user['hobby'])
break
else:
dic = {}
dic["name"] = user['name']
dic['hobby_list'] = [user['hobby']]
result.append(dic)
print(result)

但我看了好几遍上面的代码和再审题好几遍,我想到一个解决思路

思路如下:

我通过结果发现结果里有列表、字典,还有就是name和hobby相对来说可以是组成一个键值对

名字和爱好可以组成另一个键值对,所以我想到了把名字爱好放到一个字典中,最后来再变成值

具体代码如下:

def main(user_list):
#有结果可知,我们需要字典和列表,所以先设dict和list
dict={}
list=[]
for i in user_list:#这里通过for循环先把原列表中的字典提出来
dict.setdefault(i['name'],[]).append(i['hobby'])#这里通过字典的setdefault的性质来把名字去重
for k,v in dict.items():#这里通过for循环把上一步字典里的名字和爱好分开变成值
list.append({'name':k,'hobby_list':v})#这里把名字和爱好变成的键变成字典里'name'和'hobby_list'的值
return list
print(main(
[
{"name": "alex","hobby":"抽烟"},
{"name" :"alex","hobby":"喝酒"},
{"name" :"alex","hobby":"烫头"},
{"name":"wusir","hobby":"喊麦"},
{"name":"wusir","hobby":"街舞"},
]
))

总结:写代码要看清要求是什么,不一定要顺着推,可以逆着推,有结果推出来,这样也或许可以解决问题

十二.作业难点(有IT大牛路过的可以帮我解答我的疑问?万分感谢)--转行的苦逼人的更多相关文章

  1. 自学Python编程的第十天(希望有IT大牛看见的指点小弟我,万分感谢)---------来自苦逼的转行人

    2019-09-20-23:24:15 今天逛论坛.逛知识星球时.逛b站up主时,都说到低学历,非科班的人最好不要去自学Python 他们都说:如果我们学python是为了找工作,最好不要把pytho ...

  2. 第十二次oo作业

    作业十二 规格化设计简介 规格化设计的发展历史 1950年代,第一次分离,主程序与子程序的分离结构是树状模型,子程序可先于主程序编写.通过使用库函数来简化编程,实现最初的代码重用.产生基本的软件开发过 ...

  3. 第十二周作业_PSP总结报告

    回顾1 (1)回想一下你曾经对计算机专业的畅想 当初你是如何做出选择计算机专业的决定的?经过一个学期,你的看法改变了么,为什么? 你认为过去接触到的课程是否符合你对计算机专业的期待,为什么?经过一个学 ...

  4. 软工 · 第十二次作业 - Beta答辩总结

    福大软工 · 第十二次作业 - Beta答辩总结 写第十二次的时候操作失误直接在Beta版本的博客里改了...第七次冲刺的作业链接补在这里 Beta(7/7) 组长本次博客作业链接 项目宣传视频链接 ...

  5. 201621123005《Java程序设计》第十二次作业

    <Java程序设计>第十二次作业 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 面向系统综合设计-图书馆管理系统或购物车 使用流与文件改造 ...

  6. 20155213 第十二周课堂作业MySort

    20155213 第十二周课堂作业MySort 作业要求 模拟实现Linux下Sort -t : -k 2的功能 参考 Sort的实现 提交码云链接和代码运行截图 初始代码 1 import java ...

  7. 2017-2018-1 《Linux内核原理与设计》第十二周作业

    <linux内核原理与设计>第十二周作业 Sql注入基础原理介绍 分组: 和20179215袁琳完成实验 一.实验说明   SQL注入攻击通过构建特殊的输入作为参数传入Web应用程序,而这 ...

  8. 实验十二 团队作业8:软件测试与Alpha冲刺

    实验十二 团队作业8:软件测试与Alpha冲刺 实验时间 2018-6-13 Deadline: [6.13-6.19]之间任选连续5天的23:00,以团队随笔博文提交时间为准. 评分标准: 按时交 ...

  9. 实验十二 团队作业8:软件测试与Alpha冲刺 第四天

    项目 内容 这个作业属于哪个课程 老师链接 这个作业的要求在哪里 实验十二 团队作业8:软件测试与Alpha冲刺 团队名称 Always Run! 作业学习目标 (1)掌握软件测试基础技术 (2)学习 ...

随机推荐

  1. JVM探究之 —— 垃圾回收(二)

    1. 垃圾收集算法 1.1 标记清除(Mark-Sweep)算法 标记—清除算法是第一种使用和比较完善的垃圾回收算法,后续的收集算法都是基于其设计思路并对其不足进行改进而得到的. 该算法分为“标记”和 ...

  2. JAVA | Java对象的内存分配过程是如何保证线程安全的?

    JAVA | Java对象的内存分配过程是如何保证线程安全的? 专注于Java领域优质技术,欢迎关注 作者 l Hollis 来源 l Hollis(ID:hollischuang) JVM内存结构, ...

  3. HTML5中的Web Worker技术

    为了让后台程序更好的执行,在HTML5中设计了Web Worker技术.Web Worker的产生主要是考虑到在HTML4中JavaScript Web程序都是以单线程的方式执行的,一旦前面的脚本花费 ...

  4. Xamarin.FormsShell基础教程(5)Shell项目内容新建页面

    Xamarin.FormsShell基础教程(5)Shell项目内容新建页面 轻拍内容列表页面中的Add按钮后,进入内容新建页面,如图1.4和图1.5所示.在该页面中,用户可以设置新建内容的标题和具体 ...

  5. Python之多态案例

    class Canvas: def draw_pic(self, shape): print('--start draw--') shape.draw(self) class Rectangle: d ...

  6. 前端解析 excel docx

    在研究中... https://www.npmjs.com/package/xlsx https://www.jianshu.com/p/68a420a68ded https://www.jiansh ...

  7. 查找算法(2)--Binary chop--二分查找

    1. 二分查找 (1)说明 元素必须是有序的,如果是无序的则要先进行排序操作. (2)基本思想: 也称为是折半查找,属于有序查找算法.用给定值k先与中间结点的关键字比较,中间结点把线形表分成两个子表, ...

  8. linux安装redis时报collect2: fatal error: cannot find 'ld'和In file included from adlist.c:34:0:

    如题,看了下该ld命令所在文件: [root@centos redis-]# whereis ld ld: /usr/bin/ld.gold /usr/bin/ld /usr/bin/ld.bfd / ...

  9. springboot docker 部署

    1.新建一个最简单的springboot项目 https://code.aliyun.com/859143303/hello-world.git 2.src/main/docker下新建Dockerf ...

  10. OpenShift 4.2 离线安装补充记录

    OpenShift4.2详细安装参考同事王征的安装手册(感谢王征大师的研究和答疑解惑, 大坑文章都已经搞定了,我这里是一些小坑) https://github.com/wangzheng422/doc ...