dict(字典)
字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。
列表的缺点:
1,列表如果存储的数据比较多,那么他的查询速度相对慢。
2,列表存储的数据关联性不强。
python基础数据类型之一:字典。
python中唯一的映射类的数据,花括号{}括起来,他是以键值对形式存储,每一对键值对以
逗号隔开的。
{'name': 'Yang', 'age': 18, 'sex': 'man'}
ps:
数据类型的划分:
容器非容器划分:
容器型数据类型:list,tuple,dict,set。
非容器型数据类型:int str bool
可变与不可变划分:
可变(不可哈希hash)的数据类型:list dict,set
不可变(可哈希hash的)的数据类型: int bool str tuple
对数据本身变化:
i = 100
i = 90
print(i)
字典是以键值对形式存储的,
键:不重复的,唯一的,键的数据类型必须是不可变的数据类型。
值:任意数据类型,对象。
字典可以存储大量的键值对数据,
python3.5包括3.5之前:字典是无序的。
python3.6之后,字典变成有序的。
字典的优点:
1,字典存储大量的关系型数据。
2,字典的查询速度非常快。
字典的基本操作
创建
字典的创建可以使用{},或者是dict()进行创建。
dic_ = {}
dic_1 = dict()
dic_.setdefault("name", "Yang")
dic_1.setdefault("Name", "Wang")
print(dic_, dic_1) # {'name': 'Yang'} {'Name': 'Wang'}
增
dic_ = dict() # 创建字典
# 直接添加
dic_["name"] = "Tom"
print(dic_) # {'name': 'Tom'}
# setdefault添加
# dic_.setdefault("age") # 设置过后就不能修改,默认值为None
# print(dic_) # {'name': 'Tom', 'age': None}
dic_.setdefault("age", 23) # {'name': 'Tom', 'age': 23}
print(dic_)
dic_.setdefault('age', 12) # age:23 answer:{'name': 'Tom', 'age': 23}
print(dic_) # age:None {'name': 'Tom', 'age': None}
删
dic_ = {'name': 'Tom', 'age': 23, "sex": "man"}
# pop:根据key进行删除,有返回值
ret = dic_.pop("name")
print(dic_) # {'age': 23, 'sex': 'man'}
print(ret) # Tom 是对应的value
# popitem 删除最后一个,也有返回值
ret = dic_.popitem() # 删除最后一个(3.6以前是随机删除,原因的3.6以前字典无序)
print(ret) # ('sex', 'man')
print(dic_) # {'age': 23}
# del 删除 按照索引
del dic_["age"] #
print(dic_) # {}
# del dic_["age1"] # 没有找到会报错 KeyError: 'age1'
dic_ = {'name': 'Tom', 'age': 23, "sex": "man"}
# 清空字典 字典还存在
dic_.clear()
print(dic_) # {}
改
# 直接改
dic_ = {'name': 'Tom', 'age': 23, "sex": "man"}
dic_["name"] = "xiaoming"
print(dic_) # {'name': 'xiaoming', 'age': 23, 'sex': 'man'}
dic_ = {'name': 'Tom', 'age': 23, "sex": "man"}
# update 更新
dic_1 = {"name": "Jack", "age": 12, "hobby": "sing"}
# 将dic_的数据更新到dic_1数据中
dic_1.update(dic_)
print(dic_1) # {'name': 'Tom', 'age': 23, 'hobby': 'sing', 'sex': 'man'}
print(dic_) # {'name': 'Tom', 'age': 23, 'sex': 'man'}
查
dic_ = {'name': 'Tom', 'age': 23, "sex": "man"}
# 按照键(key)进行查找
ret = dic_["name"]
print(ret) # Tom
# ret1 = dic["name1"] # 未找到key则将报错
# print(ret1) # KeyError: 'name1'
# get 方式进行查找,通过键进行查找
ret3 = dic_.get("age")
print(ret3) # 23
ret4 = dic_.get("name1") # 未找到返回None,也可以进行设置返回值
print(ret4) # None
ret5 = dic_.get("name1", "未找到!")
print(ret5) # 未找到!
其他
# 查看所有keys(键)
ret = dic_.keys()
print(ret, type(ret)) # dict_keys(['name', 'age', 'sex']) <class 'dict_keys'>
# 查看可以将其装换为list类型
print(list(ret)) # ['name', 'age', 'sex']
# 查看所有的values(值)
ret1 = dic_.values()
print(list(ret1)) # ['Tom', 23, 'man']
# 查看键值对
ret2 = dic_.items()
print(list(ret2)) # [('name', 'Tom'), ('age', 23), ('sex', 'man')]
# 对元素进行读取
for data in dic_:
print(data, end=" ") # 返回的是键:name age sex
print('
')
for key in dic_.keys(): # name age sex
print(key, end=" ")
print('
')
for value in dic_.values():
print(value, end=" ") # Tom 23 man 返回字典的值
print('
')
for item in dic_.items():
print(item, end=" ") # ('name', 'Tom') ('age', 23) ('sex', 'man')
print('
')
# 对items中将key,value 进行提取
for k, v in dic_.items():
print("key:",k, "value:", v)
'''
key: name value: Tom
key: age value: 23
key: sex value: man
'''
# fromkeys
dic = dict.fromkeys([1,2,3],'太白')
print(dic) # {1: '太白', 2: '太白', 3: '太白'}
dic = dict.fromkeys('abcd','太白')
print(dic) # {'a': '太白', 'b': '太白', 'c': '太白', 'd': '太白'}
dic = dict.fromkeys('abcd', [1, 2])
print(dic) # {'a': [1, 2], 'b': [1, 2], 'c': [1, 2], 'd': [1, 2]}
# 坑: 如果你的值是一个可变的数据类型, 他在内存中是一个.id相同.
dic = dict.fromkeys('abcd',[])
print(dic) # {'a': [], 'b': [], 'c': [], 'd': []}
dic['a'].append(666) #
print(dic) # {'a': [666], 'b': [666], 'c': [666], 'd': [666]}
dic['b'].append(111)
print(dic) # {'a': [666, 111], 'b': [666, 111], 'c': [666, 111], 'd': [666, 111]}
dic['c'].append(222)
print(dic) # {'a': [666, 111, 222], 'b': [666, 111, 222], 'c': [666, 111, 222], 'd': [666, 111, 222]}
# 相当于a,b,c,d共用一个列表,当a,b,c,d中的一个添加对象,则也就添加到列表中
字典的嵌套
dic = {
'name_list': ['博哥', '菊哥', 'b哥', 'alex'],
'barry': {
'name': '太白金星',
'age': 18,
'hobby': 'wife',
}
}
# 1,给这个列表['博哥', '菊哥', 'b哥', 'alex'] 追加一个元素 '老男孩'。
dic["name_list"].append("老男孩") # {'name_list': ['博哥', '菊哥', 'b哥', 'alex', '老男孩'], 'barry': {'name': '太白金星', 'age': 18, 'hobby': 'wife'}}
# 2,将这个列表['博哥', '菊哥', 'b哥', 'alex']中的alex变成首字母大写。
dic["name_list"][-1] = dic["name_list"][-1].capitalize() # {'name_list': ['博哥', '菊哥', 'b哥', 'Alex'], 'barry': {'name': '太白金星', 'age': 18, 'hobby': 'wife'}}
# 3,将这个键值对 'name': '太白金星' 的 '太白金星' 改成男神。
dic["barry"]["name"] = "男神" # {'name_list': ['博哥', '菊哥', 'b哥', 'alex'], 'barry': {'name': '男神', 'age': 18, 'hobby': 'wife'}}
# 4,给barry对应的小字典增加一个键值对: weight: 160
dic["barry"]["weight"] = 160 # {'name_list': ['博哥', '菊哥', 'b哥', 'alex'], 'barry': {'name': '太白金星', 'age': 18, 'hobby': 'wife', 'weight': 160}}