字典
1. 可变类型与不可变类型
可以通过两种方法判断是否可变
- 通过id(对象)观察, 如果对对象作出改变后, id值不变, 那么该对象为可变对象, 否则为不可变对象
- 通过hash(对象)判断对象是否能够被哈希, 如果能那么是不可变类型, 否则为可变类型
2. 字典概念
语法:
dict = {key1:value1, key2:value2, ...}
- 字典是python里唯一一个映射类型, 字符串, 元组, 列表属于序列类型
- 字典以关键字为索引, 序列以连续的整数为索引
- 字典的key应为不可变类型, 且每个键不能重复
- 字典内的键值对排列是无序的
- 数值, 字符串, 元组可以当做key, 但是列表, 字典, 集合不能当做key
3. 字典特性
- 依靠关键字查询, 查询和插入速度极快
- 查询速度与插入速度不会因为键的增加而增加
- 会占有大量内存
创建和范文字典
# 字典的创建
dict = {} # 创建一个空字典
dict = dict() # 创建一个空字典
dict = {key1:value1, key2:value2, ...} # 创建一个有值字典
dict = dict(mapping)
# 例子: -----------------------------------
dic1 = dict([('apple', 4139), ('peach', 4127), ('cherry', 4098)])
print(dic1) # {'cherry': 4098, 'apple': 4139, 'peach': 4127}
dict = (**kwargs) # 该种情况下, 键只能为字符串, 且不能加引号, 否则报错
# 例子
dic = dict(name='Tom', age=10)
print(dic) # {'name': 'Tom', 'age': 10}
# ----------------------------------------
dict.fromkeys(seq[, value]) # 创建一个新字典, 以seq中的每一个元素作为key, value作为所有键的初始值
# 例子----------------------------------
seq = ('name', 'age', 'sex')
dic1 = dict.fromkeys(seq)
print(dic1)
# {'name': None, 'age': None, 'sex': None}
dic2 = dict.fromkeys(seq, 10)
print(dic2)
# {'name': 10, 'age': 10, 'sex': 10}
dic3 = dict.fromkeys(seq, ('小马', '8', '男'))
print(dic3)
# {'name': ('小马', '8', '男'), 'age': ('小马', '8', '男'), 'sex': ('小马', '8', '男')}
# -------------------------------------------
# 字典的访问
value = dict[key] # 通过key直接访问value
value = dict.get(key[, default=None]) # 通过key访问value, 如果不存在该key, 那么就会返回default
# 字典键值对的添加和设置
dict[key] = value # 直接添加, 如果字典已经存在key, 那么会自动覆盖之前的value
dict.setdefault(key[, default=None]) # 可以设置字典键的值, 如果字典内不存在, 那么会自动添加该键, 值为default
# 字典键值对的删除
dict.pop(key[, default]) # 删除key对应的键值对, 并返回值, 如果键不存在, 那么会返回defau
del dict[key] # 删除对应键值对, 如果字典不存在该键, 会报错
dict.popitem() # 随机删除一对键值对, 并以(key, value)的形式返回该键值对
dict.clear() # 清楚dict内的所有键值对
字典的内置方法
- dict.keys()返回一个可迭代对象, 可以通过list()方法使其变为一个列表, 获取字典的所有键
- dict.values()返回一个可迭代对象, 通过list()获取字典中的所有值
- dict.items()返回以(key, value)为元素的列表, 内含字典所有键值对
- in, not in 可以判断字典是否包含该键
- dict.copy()浅拷贝字典
- dict1.update(dict2) 把字典2更新进字典1, 如果字典1的键与字典2的键相同, 把该键的值更新
练习题
1、字典基本操作
字典内容如下:
dic = {
'python': 95,
'java': 99,
'c': 100
}
用程序解答下面的题目
字典的长度是多少
i = len(dic) # i = 3
请修改’java’ 这个key对应的value值为98
dic["java"] = 98
删除 c 这个key
del dic["c"]
dic.pop("c")
增加一个key-value对,key值为 php, value是90
dic["php"] = 90
dic.setdefault("php", 90)
获取所有的key值,存储在列表里
list = list(dic.keys())
获取所有的value值,存储在列表里
list = list(dic.values())
判断 javascript 是否在字典中
bool = "javascript" in dic
获得字典里所有value 的和
list = list(dic.values())
sum(list)
获取字典里最大的value
list = list(dic.values())
max(list)
获取字典里最小的value
list = list(dic.values())
min(list)
字典 dic1 = {‘php’: 97}, 将dic1的数据更新到dic中
dic.update(dic1)
dict = data["python"]
list1 = list(dict.keys())
for x in list1:
dict[x] = int(dict[x])
i = 0
while i < len(data["c++"]):
data["c++"][i] = int(data["c++"][i])
i += 1
list2 = data["java"]
for dict in list2:
list3 = list(dict.keys())
for x in list3:
dict[x] = int(dict[x])
print(data)
i += 1
list2 = data[“java”]
for dict in list2:
list3 = list(dict.keys())
for x in list3:
dict[x] = int(dict[x])
print(data)