Python基础14 字典的创建修改访问和遍历 popitem() keys() values() items()

  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}\nt2={1}\nt3={2}\n".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}\nl2={1}\n".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);

 

posted @ 2020-10-05 18:25  想活出点人样  阅读(216)  评论(0编辑  收藏  举报