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

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

今天题目如下:

# 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":"街舞"},
]
))

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

猜你喜欢

转载自www.cnblogs.com/hpcz190911/p/11570018.html