dict | 英['dɪkt] |
dict对象的keys() values() items() 返回的类型都不是列表或元组类型...在使用时除了把它们强制转换为列表或元组类型,还可以直接用for in遍历得到的东西..
字典中项的顺序是任意的(系统有它自己的排列方式,这种规则我们看不懂)我们只要用键去得到值就好
1.如何创建一个字典? {}
注:字典是键值对,键和值可以为任意类型
>>> s={1:2,'a':'b',3:'c','c':4} >>> s[1] 2 >>> s['a'] 'b' >>> s[3] 'c' >>> s['c'] 4
2.如何创建一个空字典?
>>> dict1={}
2第二种种创建字典的方式(感觉不太方便,作为了解)
>>> s=dict((('a',1),('b',2),('c',3))) >>> s {'a': 1, 'b': 2, 'c': 3} >>> s['a'] 1为什么这里dict有两个括号? 因为dict()函数的参数只有一个,这里将
(('a',1),('b',2),('c',3))整体作为一个元组 传进来
也可以用列表的形式
>>> c=dict([['a',1],['b',2],['c',3]]) >>> c {'a': 1, 'b': 2, 'c': 3}
3.第三种创建字典的方式
注意这里键不用加引号
>>> haha=dict(a=1,b=2,c=3) >>> haha {'a': 1, 'b': 2, 'c': 3}
>>> haha=dict(abc='123',bcd=789) >>> haha {'abc': '123', 'bcd': 789}
>>> dict1={'a':1,'b':2,'c':3} >>> dict1['d']=4 >>> dict1 {'a': 1, 'b': 2, 'c': 3, 'd': 4} >>> dict1['a']=5 >>> dict1 {'a': 5, 'b': 2, 'c': 3, 'd': 4}
5.字典类对象的方法fromkeys()的作用?为指定键(一个或多个),提供相同的值。当不提供值时,默认设置为None
注:fromkeys实际上是创建了一个新的字典
>>> dict2={}
>>> dict2.fromkeys(('a','b','c')) {'a': None, 'b': None, 'c': None}
>>> dict3={} >>> dict3.fromkeys(('a','b','c'),1) {'a': 1, 'b': 1, 'c': 1}
>>> dict4={'a':1,'b':2,'c':3,'d':4} #可见并不是更新键值,而是创建了新的字典 >>> dict4.fromkeys(('a','b'),10) {'a': 10, 'b': 10}
>>> dict5={} >>> dict5.fromkeys(range(1,11),'haha') {1: 'haha', 2: 'haha', 3: 'haha', 4: 'haha', 5: 'haha', 6: 'haha', 7: 'haha', 8: 'haha', 9: 'haha', 10: 'haha'} >>> dict5 {} #可见并不是更新键值,而是创建了新的字典
5.fromkeys()结合range()产生键?
>>> dict5={} >>> dict5.fromkeys(range(1,11),'haha') {1: 'haha', 2: 'haha', 3: 'haha', 4: 'haha', 5: 'haha', 6: 'haha', 7: 'haha', 8: 'haha', 9: 'haha', 10: 'haha'}
6.如何得到字典的所有键? dict类对象.keys()
注:键序列的类型为dict_keys类型..不是列表或者元组...但可以用强制转换成列表或元组
>>> dict1={} >>> dict2=dict1.fromkeys(range(1,11),'hh') >>> dict2 {1: 'hh', 2: 'hh', 3: 'hh', 4: 'hh', 5: 'hh', 6: 'hh', 7: 'hh', 8: 'hh', 9: 'hh', 10: 'hh'}
>>> dict1 {} >>> dict2.keys() dict_keys([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) >>> print(dict2.keys()) dict_keys([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) >>> type(dict2.keys()) <class 'dict_keys'> >>> list1=list(dict2.keys()) >>> list1 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> tuple1=tuple(dict2.keys()) >>> tuple1 (1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
7.如何得到字典的所有键对应的值? dict类对象.values()
>>> dict2={1:'a',2:'b',3:'c',4:'d'} >>> dict2.values() dict_values(['a', 'b', 'c', 'd']) >>> type(dict2.values()) <class 'dict_values'>
>>> list2=list(dict2.values()) >>> list2 ['a', 'b', 'c', 'd'] >>> tuple2=tuple(dict2.values()) >>> tuple2 ('a', 'b', 'c', 'd')
8.如何得到字典的每个项?dict对象.items()
>>> a={'a':1,'b':2,'c':3,'d':4} >>> c=a.items() >>> type(c) <class 'dict_items'> >>> print(c) dict_items([('a', 1), ('b', 2), ('c', 3), ('d', 4)]) >>> c=list(c) >>> print(c) [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
9.直接访问字典中不存在的项会发生什么?会报错
>>> dict1={1:'a',2:'b',3:'c'} >>> dict1[4] Traceback (most recent call last): File "<pyshell#157>", line 1, in <module> dict1[4] KeyError: 4
10.如何在访问字典中不存在的相时不报错?而是什么也不返回 dict类对象的get()方法
>>> dict1 {1: 'a', 2: 'b', 3: 'c'} >>> dict1.get(4) #这里什么也没返回 >>> print(dict1.get(4)) None #其实返回的是None >>> dict1 {1: 'a', 2: 'b', 3: 'c'} #该字典本身并没有改变该方法还有一参数,这个参数会在该键不存在时被打印出来
>>> dict1 {1: 'a', 2: 'b', 3: 'c'} >>> dict1.get(4,"没有这哥键哦!") '没有这哥键哦!'
11.如何查看字典的键是否有一个元素? in操作符 (此方法不能用于查看值)
{1: 'a', 2: 'b', 3: 'c'} >>> 1 in dict1 True >>> 'a' in dict1 False
12.如何清空字典?dict类对象.clear()
>>> dict1 {1: 'a', 2: 'b', 3: 'c'} >>> dict1.clear() >>> dict1 {}
13.用{}和clear()容易出现错误的一个问题
>>> a={"你好":"少年"} >>> b=a >>> a={} >>> b {'你好': '少年'}为什么b没有变成{}??因为这实际上是重新创建了一个字典,并让a的标签贴在上面。此时b还是贴在
{"你好":"少年"}上面没变如何在将a清空时,b也随之清空?
>>> a={"牧羊少年":"A"} >>> b=a >>> a.clear() >>> a {} >>> b {}因为这是对a本身进行操作的
14.如何查看一个变量(对象)的地址? 函数:id()
>>> a=1 >>> id(a) 1896765712
15.dict对象的copy()函数
注:copy()是浅拷贝 所谓浅拷贝就是东西虽然一样,但是地址不一样 举个栗子:
>>> dict1={1:'你的名字',2:'霍尔的移动城堡'} >>> dict2=dict1 >>> dict3=dict1.copy() >>> dict2 {1: '你的名字', 2: '霍尔的移动城堡'} >>> dict3 {1: '你的名字', 2: '霍尔的移动城堡'} >>> id(dict1) 65876296 >>> id(dict2) 65876296 >>> id(dict3) 65878416
16.如何删除字典中给定键所在的键值对,并返回这个键所对应的值? dict对象的pop()方法
>>> dict1={1:"地狱少女",2:"死亡笔记"} >>> dict1.pop(1) '地狱少女' >>> dict1 {2: '死亡笔记'} >>> dict1.pop(2) '死亡笔记' >>> dict1 {}
17如何随机的删除典中的一项(一对键值对),并返回这个键值对 ? dict类对象.popitem()方法
>>> dict2={1:'只有花知晓',2:"鸣鸟不飞"} >>> dict2[3]="J的故事" >>> dict2 {1: '只有花知晓', 2: '鸣鸟不飞', 3: 'J的故事'} >>> dict2.popitem() (1, '只有花知晓') >>> dict2 {2: '鸣鸟不飞', 3: 'J的故事'} >>> dict2.popitem() (2, '鸣鸟不飞') >>> dict2 {3: 'J的故事'} >>> dict2.popitem() (3, 'J的故事') >>> dict2 {}
>>> dict1={1:'神探夏洛特',2:"大侦探福尔摩斯"} >>> dict1.setdefault(3,"花生") '花生' >>> dict1 {1: '神探夏洛特', 2: '大侦探福尔摩斯', 3: '花生'}
当第二个参数为空时,默认设置为None
>>> dict1 {1: '神探夏洛特', 2: '大侦探福尔摩斯', 3: '花生'} >>> dict1.setdefault(4) >>> dict1 {1: '神探夏洛特', 2: '大侦探福尔摩斯', 3: '花生', 4: None}
19.如何将一个字典中的键值对,添加到另一个字典用? dict类对象的update()方法,可以理解成用一个字典去更新另一个字典
>>> dict1={1:'a',2:'b'} >>> dict2={3:'c',4:'d'} >>> dict1.update(dict2) >>> dict1 {1: 'a', 2: 'b', 3: 'c', 4: 'd'} >>> dict2 {3: 'c', 4: 'd'}