字典类型的内置方法
一、字典类型内置方法(dict)
1.定义:字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
dic = {'a': 1, 'b': 2} # dic = dict({'a':1,'b':2}) print(f"dic: {dic}") ###输出结果: dic: {'a': 1, 'b': 2} ########################### dic = dict(a=1, b=2, c=3) print(f"dic: {dic}") dic: {'a': 1, 'b': 2, 'c': 3} ####输出结果: dic = {1: 'a', 0: 'b'} print(f"dic[0]: {dic[0]}") # 无法区分dic是列表,还是字典,并且key不再具有描述信息 ###输出结果: dic[0]: b ######## dic = {[1,2]: 'a', 0: 'b'} # 报错
2.常用操作和内置方法:
2.1 优先掌握(*****)
- 按key存取值:可存可取
- 长度len
- 成员运算in和not in
- 删除del
- 键keys()、值values()、键值对items()
- 循环
__contains__()
1、按key存取值:可存可取
# dic之按key存取值 dic = {'a': 1, 'b': 2} print(f"first dic['a']: {dic['a']}") dic['a'] = 3 print(f"second dic['a']: {dic['a']}") ###输出结果: first dic['a']: 1 second dic['a']: 3
2.长度len
# dic之长度len dic = {'a': 1, 'b': 2} print(f"len(dic): {len(dic)}") ###输出结果: len(dic): 2
3.成员运算in和not in
# dic之成员运算in和not in dic = {'a': 1, 'b': 2} print(f"'a' in dic: {'a' in dic}") print(f"1 in dic: {1 in dic}") ###输出结果: 'a' in dic: True 1 in dic: False
4.删除
# dic之删除del dic = {'a': 1, 'b': 2} del dic['a'] print(f"dic.get('a'): {dic.get('a')}") ####输出结果: dic.get('a'): None # dic之删除pop() dic = {'a': 1, 'b': 2} dic.pop('a') # 指定元素删除 print(f"dic.pop('b'): {dic.pop('b')}") print(f"dic.get('a'): {dic.get('a')}") ###输出结果: dic.pop('b'): 2 dic.get('a'): None
# dic之删除popitem() dic = {'a': 1, 'b': 2} print(f"dic.popitem(): {dic.popitem()}") # popitem() 方法随机返回并删除字典中的一对键和值(一般删除末尾对)。 ####输出结果: dic.popitem(): ('b', 2)
5.键keys()、值values()、键值对items()
Python 字典(Dictionary) keys() 函数以列表返回一个字典所有的键。
Python 字典(Dictionary) values() 函数以列表返回字典中的所有值。
Python 字典(Dictionary) items() 函数以列表返回可遍历的(键, 值) 元组数组。
# dic之键keys()、值values()、键值对items(),python2中取出的是列表(鸡蛋);python3中取出的是元组(鸡) dic = {'a': 1, 'b': 2} print(f"dic.keys(): {dic.keys()}") print(f"dic.values(): {dic.values()}") print(f"dic.items(): {dic.items()}") ###输出结果: dic.keys(): dict_keys(['a', 'b']) dic.values(): dict_values([1, 2]) dic.items(): dict_items([('a', 1), ('b', 2)])
6.循环
# dic之循环 # dic是无序的,但是python3采用了底层优化算法,所以看起来是有序的,但是python2中的字典是无序 dic = {'a': 1, 'b': 2, 'c': 3, 'd': 4} for k, v in dic.items(): # items可以换成keys()、values() print(k, v) ###输出结果 a 1 b 2 c 3 d 4
7.__contains__()
Python 字典(Dictionary) __contains__()
函数用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。
dict3 = {'name':'z','Age':7,'class':'First'}; print("Value : ",dict3.__contains__('name')) print("Value : ",dict3.__contains__('sex')) ###输出结果: Value : True Value : False
3、需要掌握(****)
- get
- update
- fromkeys
- setdefault
1.get()
# dic之get() dic = {'a': 1, 'b': 2} print(f"dic.get('a'): {dic.get('a')}") print(f"dic.get('c'): {dic.get('c')}") ####输出结果: dic.get('a'): 1 dic.get('c'): None
2.update()
Python 字典(Dictionary) update() 函数把字典dict2的键/值对更新到dict里。
# dic之update() dic1 = {'a': 1, 'b': 2} dic2 = {'c': 3} dic1.update(dic2) print(f"dic1: {dic1}") ####输出结果: dic1: {'a': 1, 'b': 2, 'c': 3}
3.fromkeys()
Python 字典 fromkeys() 函数用于创建一个新字典,以序列 seq 中元素做字典的键,value 为字典所有键对应的初始值。
# dic之fromkeys() dic = dict.fromkeys(['name', 'age', 'sex'], None) print(f"dic: {dic}") ###输出结果: dic: {'name': None, 'age': None, 'sex': None}
4.setdefault()
Python 字典 setdefault() 函数和 get()方法 类似, 如果键不存在于字典中,将会添加键并将值设为默认值。
# dic之setdefault(),有指定key不会改变值;无指定key则改变值 dic = {'a': 1, 'b': 2} print(f"dic.setdefault('a'): {dic.setdefault('a',3)}") print(f"dic: {dic}") print(f"dic.setdefault('c'): {dic.setdefault('c',3)}") print(f"dic: {dic}") ####输出结果: dic.setdefault('a'): 1 dic: {'a': 1, 'b': 2} dic.setdefault('c'): 3 dic: {'a': 1, 'b': 2, 'c': 3}
二、练习
统计s='hello tank tank say hello sb sb'
中每个单词的个数
结果如:{'hello': 2, 'tank': 2, 'say': 1, 'sb': 2}
s='hello tank tank say hello sb sb' l=s.split() dic={} for item in l: if item in dic: dic[item]+=1 else: dic[item]=1 print(dic) ###输出结果: {'hello': 2, 'tank': 2, 'say': 1, 'sb': 2}
4.存一个值or多个值:多个值,值可以是多个类型,key必须是不可变类型,通常应该是不可变类型中的字符串类型
5.有序or无序:无序
dic = {'a': 1, 'b': 2} print(f'first:{id(name)}') dic['a'] = 3 print(f'second:{id(name)}') ###输出结果: first:4356627632 second:4356627632
6.可变or不可变:可变数据类型