• 十二.作业难点(有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":"街舞"},
    ]
    ))

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

  • 相关阅读:
    OCS边缘服务器部署(包含ISA设置)
    RMS部署文档
    推荐软件:PowerShell Plus
    OCS排错工具和最佳实践
    在Exchange Server 2007中使用多主机名称证书
    OCS边缘服务器部署
    推荐软件:Quset PowerGUI
    ISA 2008(FOREFRONT TMG)安装体验
    gridview 删除确认
    标识列 在任意编号位置插入数据
  • 原文地址:https://www.cnblogs.com/hpcz190911/p/11570018.html
Copyright © 2020-2023  润新知