day11

1. 考试最后一道大题:

user_list=[
        {"name": "alex", "hobby": "抽烟"},
        {"name": "alex", "hobby": "喝酒"},
        {"name": "alex", "hobby": "烫头"},
        {"name": "wusir", "hobby": "喊麦"},
        {"name": "wusir", "hobby": "街舞"},
         ]
# 编写函数处理user_list 并返回如下结果:
    [{'name': 'alex', 'hobby_list': ['抽烟', '喝酒', '烫头']},
    {'name': 'wusir', 'hobby_list': ['喊麦', '街舞']}
    ]
# 思路: 
#     1. 创建一个新列表
#     2. 遍历列表user_list
#     3. 判断: (1)如果列表user_list遍历出来的元素的name 在新列表中没有,就添加进去,并且转换列表,添加之后name相同的人的hobby进去.
#              (2)如果新列表中有了name一样的元素,就把他的hobby添加到hobby_list列表中    
result_list = []
for ren in user_list:
    for el in result_list:
        if ren['name'] == el['name']:
            el['hobby_list'].append(ren['hobby'])
            break
    else:
        dic = {}
        dic['name'] = ren['name']
        dic['hobby_list'] = [ren['hobby']]  # 第一个人的hobby转化成列表,容纳之后名字一样的人的hobby添加进去
        result_list.append(dic)  # 第一个人进去
print(result_list)

2. 默认值参数的使用(深坑)

# 如果默认值参数是一个可变的数据类型, 如果有人调用的时候改变了他. 其他位置看到的也跟着改变

def extendList(val,list=[]):  # 每次用的都是原来这个默认值列表,不是新的默认值列表
    list.append(val)
    return list
list1 = extendList(10)  # lst = [10,'a']
list2 = extendList(123,[])  # 给了[],就用户给的这个[]
list3 = extendList('a')  # lst = [10,'a']
print('list1=%s' % list1)   # list1=[10,'a']  1和3用的都是默认值列表,用的同一个对象
print('list2=%s' % list2 )  # list2=[123]   list2参数给了[],就用它给的这个[]
print('list3=%s' % list3)   # list3=[10,'a']  默认值列表里已经有了10,这又往默认值列表里面添加了a,别处看到的默认值列表也会跟着变
原文地址:https://www.cnblogs.com/kangqi452/p/11305550.html