1 ##字典 2 ''' 3 字典是一系列键 — 值对。每个键都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。 4 事实上,可将任何Python对象用作字典中的值。 5 ''' 6 ##初始化book字典 7 book={'类别':'教育书籍','书名':'python从入门到实践'} 8 print(book) 9 print(book['类别']) 10 print(book['书名']) 11 ##访问字典的值 12 book_name=book['书名'] 13 print(book_name) 14 ##添加键值对(字典是动态结构,可随时添加键值对。可依次指定字典名、用方括号括起的键和相关联的值) 15 book['数量']=20 16 book['作者']='Eric Matthes' 17 print(book) 18 ##创建空字典,并添加键值对 19 phone={} 20 phone['类别']='智能机' 21 phone['名称']='华为' 22 print(phone) 23 ##修改字典中的值 24 phone['名称']='苹果' 25 print(phone) 26 phone={'名称':'小米',}##对字典重新赋值的操作 27 print(phone) 28 ##案例: 29 ''' 30 对一个能够以不同速度移动的外星人的位置进行跟踪。为此,我们 31 将存储该外星人的当前速度,并据此确定该外星人将向右移动多远: 32 ''' 33 alien={'x_position':0,'y_position':25,'speed':'medium'} 34 print("orignal x_position:"+str(alien['x_position'])) 35 # 向右移动外星人 36 # 据外星人当前速度决定将其移动多远 37 if alien['speed']=='slow': 38 x_increment=1 39 elif alien['speed']=='medium': 40 x_increment=2 41 else: 42 x_increment=3 43 # 新位置等于老位置加上增量 44 alien['x_position']+=x_increment 45 print('new x_position:'+str(alien['x_position'])) 46 47 ##删除键值对 48 element={'名称':'字典元素','数量':20,'大小':8} 49 print(element) 50 del element['大小'] 51 print(element) 52 ##字典的另外一种写法 53 favorite_languages={ 54 'jen':'python', 55 'ben':'java', 56 'edward':'ruby', 57 'phil':'c', 58 } 59 ###遍历字典(遍历所有的键 —值对) 60 print('遍历favorite_languages所有的键-值对:') 61 for key,value in favorite_languages.items(): 62 print('\nkey:'+key) 63 print('value:'+value+'\n') 64 ''' 65 注意,即便遍历字典时,键 — 值对的返回顺序也与存储顺序不同。Python不关心键 — 值对的存 66 储顺序,而只跟踪键和值之间的关联关系。 67 ''' 68 ##按顺序遍历字典的所有键 69 print('按顺序遍历字典的所有键:') 70 for key in favorite_languages.keys(): 71 print(key) 72 ##按顺序遍历字典的所有值: 73 print("按顺序遍历字典的所有值:") 74 for value in favorite_languages.values(): 75 print(value) 76 ''' 77 上面这种做法提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多, 78 最终的列表可能包含大量的重复项。为剔除重复项,可使用集合(set)。集合类似于列表,但每个元素都必须是独一无二的: 79 ''' 80 favorite_food={ 81 '小明':'红烧肉', 82 '康康':'莲藕', 83 '增哥':'红烧肉', 84 '强哥':'火锅', 85 } 86 print('按顺序遍历字典的所有值,有重复项:') 87 for food in favorite_food.values(): 88 print(food) 89 ###使用集合set()剔除重复项 90 print('使用集合set()剔除重复项之后的值:') 91 for food in set(favorite_food.values()): 92 print(food) 93 ##嵌套字典 94 ''' 95 有时候,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。你 96 可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。 97 ''' 98 my_list1={'color':'red','point':5} 99 my_list2={'color':'green','point':6} 100 my_list3={'color':'black','point':8} 101 '''嵌套字典''' 102 my_list=[my_list1,my_list2,my_list3] 103 print('遍历这个嵌套字典列表:') 104 for my_list_show in my_list: 105 print(my_list_show) 106 '''案例2:''' 107 108 # 创建一个用于存储外星人的空列表 109 print('----------------------------------') 110 print('------------外星人-------------') 111 alien_dict=[] 112 #创建30个外星人 113 for alien_number in range(30): 114 new_alien={'color':'green','point':5,'speed':'slow'} 115 alien_dict.append(new_alien) 116 #修改外星人的值 117 for alien_show in alien_dict[:3]: 118 if alien_show['color']=='green': 119 alien_show['color']='yellow' 120 alien_show['speed']='fast' 121 alien_show['种类']='精英' 122 #显示前五个外星人 123 print('显示前五个外星人') 124 for alien_show in alien_dict[:5]: 125 print(alien_show) 126 127 ## 显示创建了多少个外星人 128 print('共创建了外星人有:'+str(len(alien_dict))) 129 130 ##在字典中存储列表 131 #披萨的信息 132 pizza={ 133 '厨师':'汤米', 134 '配料':['生菜','鸡蛋','面粉','牛肉'] 135 } 136 #概述所点披萨 137 print('披萨的厨师是:'+str(pizza['厨师'])+'\n配料有:') 138 for topping in pizza['配料']: 139 print('\t'+topping) 140 love_language={ 141 '小明':['C语言','Python'], 142 '强哥':['C语言','shell'], 143 '平哥':['python'], 144 '康康':['C#'], 145 } 146 for name,languages in love_language.items(): 147 print('\n'+name+'喜欢的语言有:') 148 for lang in languages: 149 print(lang) 150 ##在字典中存储字典和列表 151 print('------------------------------------') 152 print('打印张三丰和王重阳的信息:') 153 users={ 154 '张三丰':{ 155 '姓氏':'张', 156 '名称':'三丰', 157 '居住地':'武当山', 158 '门派':'武当派', 159 '嫡传弟子':['宋远桥','俞莲舟','俞岱岩','张松溪','张翠山','殷梨亭','莫声谷'] 160 }, 161 '王重阳':{ 162 '姓氏':'王', 163 '名称':'重阳', 164 '居住地':'终南山', 165 '门派':'全真教', 166 '嫡传弟子':['马钰','谭处端','刘处玄','丘处机','王处一','郝大通','孙不二'] 167 } 168 } 169 for user_name,user_info in users.items(): 170 print('姓名:'+user_name) 171 last_name=user_info['姓氏'] 172 first_name=user_info['名称'] 173 home=user_info['居住地'] 174 family=user_info['门派'] 175 child=user_info['嫡传弟子'] 176 print('姓氏:'+last_name) 177 print('名称:'+first_name) 178 print('居住地:'+home) 179 print('门派:'+family) 180 print('嫡传弟子:'+str(child)) 181 print('\n\n\n')