04-05 基本数据类型之字典类型及其内置方法

补充:以下我们通过4个方面来讲,作用、定义、类型转换、使用。其中作用用我们在基本数据类型中已经提到,不需要再进行称述了。基本数据类型网址: https://www.cnblogs.com/yang1333/p/12411707.html

一、定义

  • {}内用逗号隔开多个key:value对,其中value可以是任意类型,但是key必须是不可变类型,且不能重复,如果重复会保留后面来的key:value对。key通常是字符串类型,因为字符串类型具有描述性作用。

👇造字典的4种方式👇

1、

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中做了优化,让你看起来是有序的,其实是无序的)
  • 存一个值,存多个值
    • 存多个值(称之为容器里类型):列表、元组、字典
  • 可变,不可变
    • 可变: 列表、字典
    • 不可变:元组
posted @ 2020-03-11 17:59  给你加马桶唱疏通  阅读(270)  评论(0编辑  收藏  举报