字典接触和使用
内容:
- 字典基础知识
- 字典基本操作
一、字典基础知识
1.定义
字典(Dict),是可变的无序集合,同时也是一种以键值对为基本元素的可以存储各种数据类型的集合,用大括号({ })表示字典的开始和结束,元素之间用逗号( , )分隔。
2.键值对
由键(Key)和值(Value)组成,中间用冒号( : )隔开,字典是属于一对一映射关系的数据类型
>>> dic={'a':1, 'b':'hello', 'c':'中国'} >>> len(dic) 3
二、字典基本操作
1.字典的基本方法
- clear: # 字典清空
- copy: # 复制生成另外一个字典
- fromkeys: # 使用给定的键生成新的字典,每个键默认对应的值为None
- get: # 根据指定键,返回指定值,访问键不存在时,返回None
- items: # 以元组数组的形式返回字典中的元素
- keys: # 以类似列表的形式返回字典中的键
- values: # 以类似列表的形式返回字典中的值
- pop: # 删除指定键的元素,并返回指定键对应的值
- popitem: # 随机删除元素,并返回元素
- setdefault: # 当字典中键不存在时,设置键值对;当键存在时,获取相应键对应的值
- update: # 利用一个字典更新另外一个字典
注意:
(1)字典内部结构由哈希表构成,通过唯一的键访问对应的值,所以字典对象没有提供排序功能,字典数据类型是无序的。
(2)字典的元素(Key)不能重复(重复的默认只认最后一个值)
2.示例(字典的增删查改、遍历)
(1)通过 setdefault(obj1,obj2) 增加元素(update()方法也是可以增加元素的)
>>> dit={'a':3, 'b':2} >>> print(dit) {'a': 3, 'b': 2} >>> dit.setdefault('a') # 只传一个参数时,默认该参数为Key,元素存在时返回对应值,不存在是设置该值为None 3 >>> dit.setdefault('a',10) # 元素存在,返回值3 3 >>> print(dit) {'a': 3, 'b': 2} >>> dit.setdefault('c',10) # 元素不存在,增加该元素 10 >>> print(dit) {'a': 3, 'b': 2, 'c': 10}
(2)利用 del 函数、pop() 方法、popitem() 方法删除(三个方法若是对不存在的元素进行操作,都将报错)
>>> dit={'a':1, 'b':2, 'c':3} >>> del(dit['a']) # 使用del删除指定元素 >>> print(dit) {'b': 2, 'c': 3} >>> dit={'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6} >>> del(dit['a']) >>> print(dit) {'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6} >>> dit.pop('b') # 使用pop删除指定元素并返回改元素值 2 >>> print(dit) {'c': 3, 'd': 4, 'e': 5, 'f': 6} >>> dit.pop('c',4) # 参数 ‘值’ 可加可不加,但是 ‘键’ 一定要加 3 >>> print(dit) {'d': 4, 'e': 5, 'f': 6} >>> dit.popitem() # 使用popitem随机删除一个元素,并返回该元素(元组) ('f', 6) >>> del(dit) # 使用del删除整个字典 >>> print(dit) Traceback (most recent call last): File "<pyshell#40>", line 1, in <module> print(dit) NameError: name 'dit' is not defined >>>
(3)通过 Key 或者 get() 方法查找字典值
>>> dit={'a':1, 'b':2, 'c':3} >>> dit['b'] 2 >>> dit['d'] Traceback (most recent call last): File "<pyshell#23>", line 1, in <module> dit['d'] KeyError: 'd' >>> dit.get('b') 2 >>> dit.get('d') >>> >>> # 注意:区别在于用Key查找,若元素不存在,会报错,而用get()方法不会报错,而是显示空值
(4)通过赋值或者 update() 方法对字典进行修改(或增加)
>>> dit1={'a':1, 'b':2, 'c':3} >>> dit2={'a':4, 'c':10, 'd':7} >>> dit1.update(dit2) # 通过update()更新字典 >>> print(dit1) {'a': 4, 'b': 2, 'c': 10, 'd': 7} >>> dit1.update({'e':9}) # 通过update()增加元素 >>> print(dit1) {'a': 4, 'b': 2, 'c': 10, 'd': 7, 'e': 9} >>> dit1['e':16] Traceback (most recent call last): File "<pyshell#56>", line 1, in <module> dit1['e':16] TypeError: unhashable type: 'slice' >>> dit['e']=16 >>> print(dit1) {'a': 4, 'b': 2, 'c': 10, 'd': 7, 'e': 9} >>> dit1['f']=14 # 通过赋值增加元素或修改元素值 >>> print(dit1) {'a': 4, 'b': 2, 'c': 10, 'd': 7, 'e': 9, 'f': 14} >>>
(5)a.通过 item() 遍历字典所有键值对
>>> dit={'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6} >>> for everyone in dit.items(): print(everyone) ('a', 1) ('b', 2) ('c', 3) ('d', 4) ('e', 5) ('f', 6)
b.通过 key() 方法遍历所有键(此处的key()是可以不加的,得到的结果一样)
>>> for key in dit.keys(): print(key) a b c d e f >>> for key in dit: print(key) a b c d e f
c.通过已获取的key 遍历所有值或者使用 values() 方法遍历字典值
>>> for keys in dit: print(dit[keys]) 1 2 3 4 5 6 >>> for value in dit.values(): print(value) 1 2 3 4 5 6
3.字典的其他操作
(1)in 成员操作
>>> dit={'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6} >>> if 'a' in dit: print("a in dit")
(2)clear() 方法
>>> dit={'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6} >>> dit.clear() >>> print(dit) {} >>>
(3)copy() 方法
>>> dit1={'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6} >>> dit2=dit1.copy() >>> print(dit2) {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6} >>> id(dit1) 2586168101264 >>> id(dit2) 2586169142800 >>> dit3=dit1 # 直接通过赋值和copy()方法是有区别的,copy()方法属于深度赋值,和原来的互不干扰 >>> id(dit3) 2586168101264 >>>
(4)fromkeys() 方法
>>> dit1={'a':1, 'b':2, 'c':3, 'd':4, 'e':5, 'f':6} >>> dit2=dit1.fromkeys(['g','h','i']) >>> print(dit2) {'g': None, 'h': None, 'i': None} >>> print(dit1) {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6} >>> # 可以看出,fromkeys()方法得到的结果和原始的字典无关,都是根据提供的键生成一个新的字典