第九篇 字典类型的内置方法

第九篇 字典类型的内置方法

#dict(字典)

1 用途

  • 可以用key描述值,相较于索引取值更直观高效
  • 多用于存的值是不同的状态,比如存的值有姓名、年龄、性别等等

2 如何去定义一个字典类型

  • 大括号 {} 包裹键值,并用逗号隔开每个键值对,键值对的形式为 key : value
  • key必须为不可变数据类型,key一般用字符串类型;value 可以是任意数据类型
dic = {'a':6,'b':3} #等同于 dic = dict({'a':6,'b':3})
print(dic)
'''结果是:
{'a':6,'b':3}
'''
  • 也可以用内置函数 dict()
dic = dict(a=6,b=3) '''不能写成dic = dict(6=a,3=b) 会有语法错误“这个关键字不能成为一种表达”'''
print(dic)
'''结果是:
{'a': 6, 'b': 3}
'''
  • 不推荐用数字来充当key,虽然数字用作key本身没问题
dic = {1:'jojo',2:'bob',0:'jim'}
print(f'dic[0] = {dic[0]}')  '''很容易让人误以为是列表,而且key不再具有描述信息的能力'''
'''结果是:
dic[0] = jim
'''
  • 不能用unhashable类型(也即是可变数据类型)充当key
dic = {[0]:'jim','age':5}
'''程序会报错'''

3 常用操作和内置方法

  • 按key 存取值
dic = {'name':'king','age':26}
print(dic['name'])
#结果是 king 
  • 长度len()
dic = {'name':'king','age':26,'gender':'male'}
print(len(dic))
#结果是:3 
#数的应该是 key 的个数
  • 成员运算 in 和 not in
dic = {'name':'king','age':26,'gender':'male'}
#判断字典中是否有我们给出的成员
print(f'{"king" in dic}')
print(f'{"name" in dic}')
print(f'{"age" in dic}')
print(f'{"king" not in dic}')
print(f'{not "king" in dic}')
#结果是:Flase
#       True
#       True
#       True
#       True
  • 键 keys()、值 values()、键值对 items()

注意:使用这三种方法时,python2中打印的是列表,python3中打印的是元组

## 我们用python3来演示 ##
# 取键 keys()
dic = {'rank':12,'score':66}
print(dic.keys())
#结果是:dict_keys(['rank', 'score'])

# 取值 values()
dic = {'rank':12,'score':66}
print(dic.values())
#结果是:dict_values([12, 66])

# 取简直对 items()
dic = {'rank':12,'score':66}
print(dic.items())
#结果是:dict_items([('rank', 12), ('score', 66)])
  • 用循环和上述的三种方法可以取出想要的值
# dic是无序的,但是python3采用了底层优化算法,所以看起来是有序的,但是python2中的字典是无序,并且输出的是元组类型
dic = {'name':'king','age':26,'gender':'male'}
for K,V in dic.items():         #可以把items()换成keys()或values()试试
    print(K,V)
#可以打印字典中的每一个元素值
#python3中打印的结果是
'''
name king
age 26
gender male
'''

##python2中打印结果:
'''
('gender', 'male')
('age', 26)
('name', 'king')
'''

  • 删除 del
dic = {'name':'king','age':26,'gender':'male'}
del dic['name']  
print(dic)
'''输出结果:{'age': 26, 'gender': 'male'}'''

  • 删除(可以指定key之后删除元素,返回值是value) pop()
dic = {'name':'king','age':26,'gender':'male'}
print(dic.pop('name'))
print(dic)
'''结果是:
king
{'age': 26, 'gender': 'male'}
'''

  • 随机删除一个元素(返回值的类型是元组) popitem()不需要参数
dic = {'name':'king','age':26,'gender':'male'}
print(dic.popitem())
print(dic)
'''结果是:
('gender', 'male')
{'name': 'king', 'age': 26}
'''

  • get() 通过key获取value,并返回value,但不对字典做任何操作,当输入的key不在字典中时,返回值是None
dic = {'name':'king','age':26,'gender':'male'}
print(dic.get('name'))
print(dic)
'''结果是:
king
{'name': 'king', 'age': 26, 'gender': 'male'}
'''

  • update() 更新字典,参数必须是字典类型
dic = {'name':'king','age':26}
dic.update(dict(a=2))
print(dic)
'''结果是:
{'name': 'king', 'age': 26, 'a': 2}
'''

  • fromkeys() 用于创建一个新字典,以列表 key_list 中的元素作为新字典的键,value为新字典所有键对应的初始值
key_list = ['name','age','gender']
dic = dict.fromkeys(key_list,None)
print(dic)
'''结果是:
{'name': None, 'age': None, 'gender': None}
'''

  • setdefault() 和get()有点类似,可以通过键key查看value,不同的时,当查看的元素不存在时,它会在字典中将查看的内容设置为新的字典元素,且设置完之后不能再通过同样的方法改变value了。(value值默认是None)
dic = {'name':'king','age':26}
print(dic.setdefault('name'))
print(dic.setdefault('gender'))
print(dic)
print(dic.setdefault('gender','male'))
print(dic)
'''结果是:
king
None
{'name': 'king', 'age': 26, 'gender': None}
None
{'name': 'king', 'age': 26, 'gender': None}
'''

4 存一个值or多个值

  • 多个值

5 有序or无序

  • 无序
  • 字典是无序的,但是python3采用了底层优化算法,所以看起来是有序的,但是python2中的字典是无序,可以在python2中通过for循环取值查看

6 可变or不可变

  • id不变值可变,即在原值的基础上修改,则为可变数据类型;值变id也变,即重新申请一个空间放入新值,则为不可变数据类型
  • 字典是可变数据类型
posted @ 2019-05-11 11:52  newking_itman  阅读(128)  评论(0)    收藏  举报