03 基本数据类型之字典及其内置方法
Posted yang1333
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了03 基本数据类型之字典及其内置方法相关的知识,希望对你有一定的参考价值。
03 基本数据类型之字典及其内置方法
补充:以下我们通过4个方面来讲,作用、定义、类型转换、使用。其中作用用我们在基本数据类型中已经提到,不需要再进行称述了。基本数据类型网址: https://www.cnblogs.com/yang1333/p/12411707.html
一、定义
- {}内用逗号隔开多个key:value对,其中value可以是任意类型,但是key必须是不可变类型,且不能重复,如果重复会保留后面来的key:value对。key通常是字符串类型,因为字符串类型具有描述性作用。
??造字典的4种方式??
1、{key:value}
dic = {'k1': 1, 'k2': 2.3, 'k3': [1, 2, 3]} # dic=dict({'k1': 1, 'k2': 2.3, 'k3': [1, 2, 3]})
print(dic) # {'k1': 1, 'k2': 2.3, 'k3': [1, 2, 3]}
2、dict(key=value)
dic = dict(k1=1, k2=2.3, k3=[1, 2, 3])
print(dic) # {'k1': 1, 'k2': 2.3, 'k3': [1, 2, 3]}
3、dict(二维列表或元组) --> 也是数据类型转换
info = [
['name', 'egon'],
('age', 18),
['sex', 'male']
]
# 需求:把info中的列表或者元组,第一个值当作字典的key,第二值当作字典的value
# 方式一:
dic = {}
for item in info:
dic[item[0]] = item[1]
print(dic) # {'name': 'egon', 'age': 18, 'sex': 'male'}
# 方式二;基于上面优化
dic = {}
for key, value in info:
dic[key] = value
print(dic) # {'name': 'egon', 'age': 18, 'sex': 'male'}
# 方式三: 最优解,使用dict直接生成(数据类型转换)
dic = dict(info)
print(dic) # {'name': 'egon', 'age': 18, 'sex': 'male'}
4、fromkeys 快速初始化一个字典
- fromkeys 快速创建字典。传的第1个值是可迭代对象,其中这个可迭代对象中每个值都充当字典的key。传的第2个值是为字典的所有key指定同一个value。
li = ['name', 'age', 'sex']
# 需求:快速生成一个字典,把li中的每个值当作字典的key,字典的value默认位0
dic = {}.fromkeys(li, None)
print(dic) # {'name': None, 'age': None, 'sex': None}
二、类型转换
- 上面造字典的4总方式中,第3种的方式三,也交数据类型转换。
三、使用:内置方法
??优先掌握的操作??
1、按照索引取值(正向取+反向取):既可存也可取
dic = {'name': 'egon', 'age': 18, 'sex': 'male'}
# key存在,则修改原值
dic['sex'] = 'female'
print(dic) # {'name': 'egon', 'age': 18, 'sex': 'female'
# key不存在,则创建新值
dic['salary'] = 3.3
print(dic) # {'name': 'egon', 'age': 18, 'sex': 'female', 'salary': 3.3}
2、长度len
dic = {'name': 'egon', 'age': 18, 'sex': 'female', 'salary': 3.3}
# 注意:统计的是key的个数
print(len(dic)) # 4
# 如果key重复出现,这些重复的key,只会留下一个,留下的那个取决于,谁后来,也就是我们通常所说的赋值操作中key存在,则修改值得操作
dic = {'name': 'egon', 'age': 18, 'sex': 'female', 'salary': 3.3, 'salary': 3.2}
print(len(dic)) # 4
print(dic) # {'name': 'egon', 'age': 18, 'sex': 'female', 'salary': 3.2}
3、成员运算int和not in
- 在字典没有任何附加操作得前提下,成员运算判断的是字典的key.
dic = {'name': 'egon', 'age': 18, 'sex': 'female', 'salary': 3.2}
print('name' in dic) # True
print('name' not in dic) # False
print(not 'name' in dic) # False(不推荐使用)
5、删除 del、pop、popitem
- del 通用的删除方法,只是单纯的删除,没有返回值(注意:不支持赋值语法)
- pop 根据key进行删除。返回值就是删除key对应的value。(注意:与列表的pop操作不一样,这里的pop必须指定参数)
- popitem 没有参数,随机删除。返回一个元组,元组里面的第1个值是删除的key,第2个值就是该key对应的value。
# 1、del
dic = {'name': 'egon', 'age': 18, 'sex': 'female', 'salary': 3.2}
# 注意:不支持赋值语法
# x = del dic['name'] # SyntaxError: invalid syntax
del dic['name']
print(dic) # {'age': 18, 'sex': 'female', 'salary': 3.2}
# 2、pop
dic = {'name': 'egon', 'age': 18, 'sex': 'female', 'salary': 3.2}
# 注意:与列表的pop操作不一样,这里的pop必须指定参数
# dic.pop() # TypeError: pop expected at least 1 argument, got 0
res = dic.pop('name')
print(dic) # {'age': 18, 'sex': 'female', 'salary': 3.2}
print(res) # egon
# 3、popitem
dic = {'name': 'egon', 'age': 18, 'sex': 'female', 'salary': 3.2}
dic.popitem()
print(dic) # {'name': 'egon', 'age': 18, 'sex': 'female'}
6、键keys()、值values()、键值对items()在python2与python3中比较
- 举例:python2中是一筐鸡蛋,python3中是一只老母鸡。
# python2中的键keys()、值values()、键值对items()示例
'''
>>> dic = {'name': 'egon', 'age': 18, 'sex': 'female'}
>>>
>>> dic.keys()
['age', 'name', 'sex']
>>>
>>> dic.values()
[18, 'egon', 'female']
>>>
>>> dic.items()
[('age', 18), ('name', 'egon'), ('sex', 'female')]
'''
# python3中的键keys()、值values()、键值对items()示例
'''
>>> dic = {'name': 'egon', 'age': 18, 'sex': 'female'}
>>>
>>> dic.keys()
dict_keys(['name', 'age', 'sex'])
>>>
>>> dic.values()
dict_values(['egon', 18, 'female'])
>>>
>>> dic.items()
dict_items([('name', 'egon'), ('age', 18), ('sex', 'female')])
'''
7、键keys()、值values()、键值对items() + for循环
dic = {'name': 'egon', 'age': 18, 'sex': 'female'}
# 循环取值取出字典key:for循环与键keys()(鸡肋)
for key in dic:
print(key)
'''
name
age
sex
'''
for key in dic.keys(): # 鸡肋
print(key)
'''
name
age
sex
'''
# 循环取值取出字典key:for循环与值values()
for value in dic.values():
print(value)
'''
egon
18
female
'''
# 循环取值取出字典key:for循环与键值对items()
for key, value in dic.items():
print(key, value)
'''
name egon
age 18
sex female
'''
8、键keys()、值values()、键值对items() + 数据类型转换(把老母鸡转换成列表)
dic = {'name': 'egon', 'age': 18, 'sex': 'female'}
print(list(dic)) # ['name', 'age', 'sex']
print(list(dic.keys())) # ['name', 'age', 'sex']
print(list(dic.values())) # ['egon', 18, 'female']
print(list(dic.items())) # [('name', 'egon'), ('age', 18), ('sex', 'female')]
??优先需要掌握的操作??
1、get 与 dict[key] 取值
- dict[key] 取值,key不存在,报错。
- get 取值,key存在,返回None。传(推荐使用:容错性更好)
dic = {'name': 'egon', 'age': 18, 'sex': 'female'}
# 1、dict[key] --> key不存在,报错
# print(dic['salary']) # KeyError: 'salary'
# 2、get ---> key存在,返回None(推荐使用)
print(dic.get('name')) # egon
print(dic.get('salary')) # None
2、clear
- clear 没有参数,清空字典。
dic = {'name': 'egon', 'age': 18, 'sex': 'female'}
dic.clear()
print(dic) # {}
3、update
- update 更新,有key则覆盖原来的value,没有创建。只传1个字典类型的值。返回值None。
dic = {'name': 'egon', 'age': 18}
res = dic.update({'name': 'alex', 'salary': 3.3})
print(res) # None
print(dic) # {'name': 'alex', 'age': 18, 'salary': 3.3}
4、setdefault
- setdefault key存在,返回原值并不做修改,key不存在,返回添加的值并作修改。传的第1个值为字典的key。传的第2个值为字典的value.
dic = {'name': 'egon', 'age': 18}
# key存在,返回原值
res = dic.setdefault('name', 'alex')
print(res) # egon
print(dic) #{'name': 'egon', 'age': 18}
# key不存在,返回添加的值
res = dic.setdefault('salary', 3.3)
print(res) # 3.3
print(dic) # {'name': 'egon', 'age': 18, 'salary': 3.3}
??拓展:pass 与 ...??
- 主要作用就是占位,让代码整体完整,从而保证格式或语义完整。
if True:
pass
if True:
...
总结:基于之前所学数字、字符串、列表、字典、元组等总结
- 有序无序:判断条件是否有索引
- 有序:字符串,元组、列表
- 无需:字典(字典的在python3中做了优化,让你看起来是有序的,其实是无序的)
- 存一个值,存多个值
- 存一个值:整型、浮点型、字符串
- 存多个值:列表、元组、字典
- 可变,不可变
- 可变: 字典
- 不可变:整型、浮点型、字符串、元组
以上是关于03 基本数据类型之字典及其内置方法的主要内容,如果未能解决你的问题,请参考以下文章