1 #字典 2 3 #字典是可变的,可迭代的一种数据结构 4 #字典结构分为两个部分组成 5 #key 键视图 value 值视图 6 #key不能包括有重复的数据,但是value可以 7 8 #创建字典 9 #用dict()来创建或者用{:}来创建 10 11 a=dict({1:"玩",2:"个",3:"个",4:"锤",5:"子",6:"哦"}); 12 #这样我们就建立了一个key和value对应的字典 13 print(a); 14 15 b={1:"不",2:"玩"}; 16 #这样也创建了一个字典 17 print(b); 18 19 #也可以用元组组合来创建一个字典 20 t1=(1,"?"); 21 t2=(2,"!"); 22 t3=(3,"@"); 23 t4=(4,"#"); 24 t_all=(t1,t2,t3); 25 print("t1={0} t2={1} t3={2} ".format(t_all[0],t_all[1],t_all[2])); 26 #这样我们就组成了一个由三个规则的元组组成的大元组 27 #而这个大的元组,是存在迭代性的 28 #这就可以用dict(iterable); 29 c=dict(t_all); 30 print(c); 31 #这样就通过元组生成了一个字典 32 33 #那么列表是否也有这种性质呢? 34 l1=[1,"列表"]; 35 l2=[2,"牌面"]; 36 l_all=[l1,l2]; 37 print("l1={0} l2={1} ".format(l_all[0],l_all[1])); 38 d=dict(l_all); 39 print(d); 40 #可以发现,列表也是可以完成这个操作的 41 42 #还有一种比较特殊的创建方法 43 #但是它只能创建字符串类型的字典 44 #dict(key=value ); 45 #这样的形式,而且key必须是字符串类型 46 47 e=dict(cc="ddd",dd="eee" ); 48 print(e); 49 #而且要注意的是 50 #key是字符串类型,但是不能加上单引号或者双引号 51 52 #比较鸡肋的是如果你想输入的key是数字型字符串 53 #那么你必然不会成功 54 #e=dict(100="ddd",200="eee"); 55 #这样的式子,他不会认为是字符串,而是认为是数字数据 56 e=dict(s100 ="dssdd",s200="eddee"); 57 #而只有这样子才能被识别成字符串 58 print(e); 59 60 print("/////////////////////////////////"); 61 62 #修改字典 63 #最简单的方法 64 #直接利用字典给出的索引来修改 65 66 f={10:"100",20:"C",30:40}; 67 print(f); 68 f[10]="十"; 69 print(f); 70 #这里就知道key10对应value被改变了 71 72 #通过del也可以删除字典的键值对 73 del f[20]; 74 #但是要注意,del不是函数而是一个语句 75 #但是如果没有找到删除的值,就会抛出异常 76 #del f[20]; 77 78 #pop(key,value) 79 #这里也可以使用pop()来删除 80 #返还值依然是删除的值 value 81 #如果没有找到 82 #不会抛出异常,但是会返还之前查询的value 83 84 f={10:"100",20:"C",30:40}; 85 print("我删除了:",f.pop(10)); 86 print(f); 87 print("我可能删除了:",f.pop(20,"C")); 88 print(f); 89 90 #如果我们的pop()key写对了value不正确会发生什么? 91 f={10:"100",20:"C",30:40}; 92 print("我可能删除了:",f.pop(10,"C")); 93 print(f); 94 #这里我们看到key10的对还是被删除了 95 f={10:"100",20:"C",30:40}; 96 print("我可能删除了:",f.pop(101,"C")); 97 print(f); 98 #value是正确但是key是错误的,就不会正确的删除 99 100 #popitem() 101 #任意删除一组键值对,然后把删除的这组键值对用元组的形式表示出来 102 103 f={10:"100",20:"C",30:40}; 104 print("我删除了:",f.popitem()); 105 print(f); 106 print("我删除了:",type(f.popitem())); 107 print(f); 108 109 print("////////////////////////////////"); 110 111 #字典的访问 112 #items() 113 #返还字典内的所有元素 114 f={10:"100",20:"C",30:40}; 115 print(f.items()); 116 #会以一种更直观的格式呈现 117 118 #keys() 119 #展示字典内的所有key键 120 print(f.keys()); 121 122 #values() 123 #展示字典内的所有value值 124 print(f.values()); 125 126 #get(key,value) 127 #通过键来找到对应的value并返回 128 #如果没有找到就会返回上面填写的value值 129 print(f.get(10)); 130 print(f.get(1000,"找不到!")); 131 #但是没有填写默认的value的值 132 #没有找到的话就没有返回值 133 print(f.get(555)); 134 #None是返还值 135 136 #此外还可以用in和not in来判断是否在字典内 137 #但这只在PythonShell内有用 138 ''' 139 例如这样 140 100 in f 141 >>> Ture 142 "S" in f 143 >>> False 144 145 ''' 146 147 #遍历字典 148 #还是利用for 迭代实现 149 #这里就之举出一个特殊的例子 150 151 for x ,y in f.items(): 152 print("Key:{0}--Value:{1}".format(x,y)); 153 #这里要搞清楚几个点 154 #首先items生成的是什么? 155 #items返回的是键值对的元组序列,所以这里我们用x和y 156 #对元组中拆包出来的两个变量 157 g={10:100}; 158 for x ,y in g.items(): 159 print("Key:{0}--Value:{1}".format(x,y)); 160 print(type(x),type(y)); 161 print(type(g.items())) 162 163 print("///////////////////////////////////"); 164 165 #字典的推导式 166 #因为key键和value值两组数据 167 #所以字典的推导式就相对灵活许多 168 169 aa={1:10,2:20,3:33}; 170 bb={k:v for k,v in aa.items() if(v/k==10)}; 171 print(bb); 172 #这里我们就成功完成了一个字典的推导式 173 #这里的基本相对的就是 174 ''' 175 for k,v in aa.items(): 176 if(v/k==10): 177 key=k; 178 value=v; 179 ''' 180 #基本和列表的推导式 181 ''' 182 for k,v in aa.keys(): 183 if(v/k==10): 184 key=k; 185 186 ''' 187 bb={k for k,v in aa.items() if(v/k==10)}; 188 print(bb); 189 #这里就只读取了key的值 190 bb={k*20:v+20 for k,v in aa.items() if(v/k==10)}; 191 print(bb);