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,别处看到的默认值列表也会跟着变