关于字典,列表,集合的习题练习

1. 统计出
    北京有哪些车牌
    山东有哪些车牌
黑龙江有哪些车牌
2. 升级.
    各个省会城市车, 保存在dic中
    {'京':['京Bxn508'], 鲁:['鲁A32212', '鲁A45678'], '黑':['黑A45678']}

lst = ['京Bxn508', '鲁A32212', '鲁B12345', '鲁A45678', '黑A45678', '黑C49678']

一题so easy就不写了,来看下升级题,后面有注释的没有按规范缩进(PEP8规范,后面会讲),可能会眩晕,凑乎看吧,下次一定注意!

 1 dic={}
 2 for i in lst:
 3     if "" in i:
 4         if '' not in dic:
 5             dic['']=[]
 6         dic[''].append(i)
 7     elif '鲁A' in i:
 8         if '' not in dic:
 9             dic['']=[]
10         dic[''].append(i)
11     elif '黑A' in i:
12         if '' not in dic:
13             dic['']=[]
14         dic[''].append(i)
15 print(dic)
简单的if,elif版

 

 1 from collections import defaultdict#导入collections模块中的defaultdict(带有默认值的字典)类
 2 my_dict=defaultdict(list)#实例化defaultdict类
 3 for i in lst:
 4     if '' in i:
 5         my_dict[''].append(i)
 6     elif '鲁A' in i:
 7         my_dict[''].append(i)
 8     elif '黑A' in i:
 9         my_dict[''].append(i)
10 print(my_dict)
模块进阶版:后期会讲到这个类,很容易理解

 


进阶版,可以适用于扩展原有的列表。
lst = ['京Bxn508', '鲁A32212', '鲁B12345', '鲁A45678', '黑A45678', '黑C49678','津C5343','晋A4357']
 1 dic_final={}
 2 li=[]
 3 for i in lst:#循环整个列表
 4     if i[0] in ('','','',''):#排除四个直辖市,可以用startwith
 5         li.append(i[0])#直接添加首个字符
 6     else:
 7         li.append(i[0]+'A')#其余的都加个A表示省会城市
 8 set_provincial=set(li)#用集合将原省会列表去重
 9 list_provincial=list(set_provincial)#将集合转回列表
10 for i in lst:#外层循环车牌列表
11     for j in list_provincial:#里层循环去重后的省会列表
12         if j in i:
13             if j not in dic_final:
14                 dic_final[j]=[]
15             dic_final[j].append(i)
16 print(dic_final)
双层for循环嵌套(逻辑和普通版一样,用for循环简

 



posted @ 2018-06-07 15:25  文濤  阅读(471)  评论(6)    收藏  举报