Python基础之字典dict
字典:通过若干个键值对存取数据,每一个键值对都包含两部分:分别是key:value
从字典中存取数据可以直接根据key来实现,因此数据存取效率比列表更加高效
1.字典的创建
# 基本语法
dict = {key1 : value1, key2 : value2 }
# 例:
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
注意:
- 字典的值可以是任意类型的值,包括但不限于整型、字符串、列表、对象等
- 字典的键不允许重复,且是不可变的。如数字、字符串、元组等可作为字典的键,而列表等却不能
2.字典数据的增加
方法一: 直接赋值 dict[key] = value
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
dic["sex"] = "男"
print(dic)
# {'name': 'WXQ', 'age': 22, 1: [1, 2, 3], 'sex': '男'}
方法二: 字典的拼接 dic1.update(dic2)
使用字典dic2对dic1做数据更新,如果dic2中对应的键值对dic1之前不存在,此时对该键值对执行拼接操作,如果该键值对中键之前存在,此时执行数据更新
dic1 = {"name": "翠花", "sex": "女"}
dic2 = {"score": 30, "class": "计算机专业"}
dic1.update(dic2)
print(dic1)
# {'name': '翠花', 'sex': '女', 'score': 30, 'class': '计算机专业'}
方法三:将值的内容设置为列表,向列表中添加元素(基本不用)
3.字典数据的删除
(1) dict.pop(key) 删除指定的键值对,并返回该值
dic1 = {"name": "翠花", "sex": "女"}
print(dic1.pop("sex"))
print(dic1)
# 女
# {'name': '翠花'}
(2) dict.popitem() 随机返回并删除字典中的一对键和值(一般删除末尾对)
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
dic.popitem()
print(dic)
# {'name': 'WXQ', 'age': 22}
(3) dict.clear() 清空字典
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
dic.clear()
print(dic)
# {}
(4) del dict[key] 删除指定的键(相当于把键值对一起删除)
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
del dic["age"]
print(dic)
# {'name': 'WXQ', 1: [1, 2, 3]}
(5) del dict 删除整个字典,再次访问会抛出异常
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
del dic
print(dic)
# NameError: name 'dic' is not defined
4.字典数据的更新
字典数据更新直接使用 dict[key] = 新值
覆盖之前内容即可
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
dic["name"] = "二狗子"
print(dic)
# {'name': '二狗子', 'age': 22, 1: [1, 2, 3]}
5.字典数据的读取
(1) dict[key]
直接读取,如果不存在相应的值会抛出KeyError
异常
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
print(dic["name"])
# WXQ
print(dic["school"])
# KeyError: 'school'
(2) dict.get(key,default = None)
根据指定的key来获取对应的value,该方法可以保证数据获取的安全性,即当没有对应的键时,计算机会返回一个default指定类型的数据,默认为None
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
print(dic.get("name"))
# WXQ
print(dic.get("school"))
# None
(3) str(dict)
将字典转化为字符串输出(正常情况下不会使用)
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
print(str(dic))
print(type(str(dic)))
# {'name': 'WXQ', 'age': 22, 1: [1, 2, 3]}
# <class 'str'>
(4) dict.keys()
以列表返回一个字典所有的键
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
print(dic.keys())
# dict_keys(['name', 'age', 1])
(5) dict.values()
以列表返回字典中的所有值
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
print(dic.values())
# dict_values(['WXQ', 22, [1, 2, 3]])
(6) dict.setdefault()
如果 key 在 字典中,返回对应的值。如果不在字典中,则插入 key 及设置的默认值 default,并返回 default ,default 默认值为 None
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
print(dic.setdefault("name", None))
print(dic.setdefault("school", None))
print(dic)
# WXQ
# None
# {'name': 'WXQ', 'age': 22, 1: [1, 2, 3], 'school': None}
(7) dict.items()
以列表返回可遍历的(键, 值) 元组数组
dic1 = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
print(dic1.items())
# dict_items([('name', 'WXQ'), ('age', 22), (1, [1, 2, 3])])
6.字典遍历
方法一:for-in
如果直接遍历字典,每一次从字典中遍历出的是字典的key,根据key输出value
dic1 = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
for key in dic1:
print(dic1.get(key))
# WXQ
# 22
# [1, 2, 3]
方法二:通过dict.item()
for-in 如果通过字典的dic.item()
遍历字典,此时得到的是对应键值对的键值两部分内容
dic1 = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
print(dic1.items())
for key, value in dic1.items():
print(key, ":", value)
# dict_items([('name', 'WXQ'), ('age', 22), (1, [1, 2, 3])])
# name : WXQ
# age : 22
# 1 : [1, 2, 3]
7.其他方法
(1) dict.copy()
返回一个字典的浅复制
dic1 = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
dic2 = dic1.copy()
dic1[1].append(4)
print(dic1)
print(dic2)
# {'name': 'WXQ', 'age': 22, 1: [1, 2, 3, 4]}
# {'name': 'WXQ', 'age': 22, 1: [1, 2, 3,
注:浅复制:拷贝父对象,不会拷贝对象的内部的子对象。dic1 和 dic2 是一个独立的对象,但他们的子对象还是指向统一对象
(2) len(dict)
计算字典元素个数,即键值对的总数
dic = {"name": "WXQ", "age": 22, 1: [1, 2, 3]}
print(len(dic))
# 3
(3) dict.fromkeys(seq[, value])
用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值
seq
– 字典键值列表。
value
– 可选参数, 设置键序列(seq)的值。
seq = ("naem", "sex", "age")
dic = dict.fromkeys(seq, None)
print(dic)
# {'naem': None, 'sex': None, 'age': None}