十二.作业难点(有IT大牛路过的可以帮我解答我的疑问?万分感谢)--转行的苦逼人
程序员文章站
2022-07-09 20:27:21
今天开始改变写博客风格,其他不多说. 今天题目如下: 我先写自己的写程序的方法,先直接看正确完整的代码直接往下看 一开始看了题目,我发现的规律是"alex"、"name"、"hobby"由多个变成一个 因此我想到了用set集合去重 我是想要把user_list列表的键收集起来变成列表,然后通过set ......
今天开始改变写博客风格,其他不多说.
今天题目如下:
# 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":"街舞"}, ] ))
总结:写代码要看清要求是什么,不一定要顺着推,可以逆着推,有结果推出来,这样也或许可以解决问题
上一篇: 让人头大的各种锁,从这里让你思绪清晰
下一篇: DRF框架学习总结