数据类型之字典类型
数据类型之字典类型
[scode type="green" size=""]dict 字典类型[/scode]
字典是有序、键不重复且元素只能是键值对的可变****的数据容器。在Python中用 dict
表示。
注意:在Python3.6之前字典是无序的,之后就是有序的了。
一、定义
- 字典是包含0个或多个键值对元素组成的有序字典。
- 字典可以对元素进行增加、删除、替换、查找等操作。
- 字典没有长度的限制,但键必须是可哈希。
- 字典用
{k:v}
表示,也可以通过dict()
函数创建空字典或将一对的集合或字符串类型转换为字典类型。
注意:字典的键不能重复,重复则会被覆盖
# 创建字典方式一
data = {"uesr":"pwd","uesr","123"}
print(data) # {"uesr","123"}
# 创建字典方式二
v1 = {} # 空字典
v2 = dict()
当我们想要表示一组固定的信息时,用字典更加直观。
# 用户列表
user_list = [{"name":"lishi","pwd","123"},{"name":"zhangsan","pwd","1230"}]
二、字典类型的操作
data = {"name":"张三","age":27}
v1 = data.get("name")
print(v1)
# 张三
v2 = data.get("age")
print(v2)
v3 = data.get("emall")
print(v3)
# None 当没有键时,默认返回None
if v3:
print(v3)
else:
print("没有这个键")
# 没有这个键
v4 = data.get("boyy",123)
print(v1) # 存在键名就返回键名,不存在就返回后面的值。
输出的是一个高仿的列表,这个高仿的列表可以被循环。也可以判断是否存在。
data_dict = {"name":"张三","age":27}
data = data_dict.keys()
print(data) # dict_keys(['name', 'age'])
# 输出的是一个高仿的列表,这个高仿的列表可以被循环。也可以判断是否存在。
for ele in data:
print(ele)
# name
# age
if "name" in data:
print("name这个键存在")
# name这个键存在
输出的也是高仿的列表。
data_dict = {"name":"张三","age":27}
data = data_dict .values()
print(data) # dict_values(['张三', 27])
# 获取所有的值,也是一个高仿的列表。
输出的也是高仿的列表,里面存放的是元组类型。
data_dict = {"name":"张三","age":27}
data = data_dict.items()
print(data) # dict_items([('name', '张三'), ('age', 27)])
# 也是高仿的列表,里面是元组。
for item in data:
print(item) # 输出的是元组
# ('name', '张三')
# ('age', 27)
print(item[0],item[1])
# name 张三
# age 27
-------------------------------------------
for key,value in data:
print(key,value) # 将键值从元组里取出来,输出的是字符串
# name 张三
# age 27
字典里面有的键值对不做改变,没有就添加进去。
data_dict = {"name":"张三","age":27}
data_dict.setdefault("emall",123456)
print(data_dict ) # {'name': '张三', 'age': 27, 'emall': 123456}
# 如有添加的键则不做改变。
data_dict.setdefault("name","李四")
print(data_dict ) # {'name': '张三', 'age': 27, 'emall': 123456}
字典里面有的键值对就改变值,没有就添加进去。
data_dict = {"name":"张三","age":27}
data_dict.update({'name': '李四', 'age': 29, 'emall': 444593})
print(data_dict) # {'name': '李四', 'age': 29, 'emall': 444593}
移除的值可以赋值给一个变量
data_dict = {"name":"张三","age":27}
data = data_dict.pop("age") # 没有 键 则会报错
print(data_dict) # {'name': '张三'}
print(data)
data_dict = {"name":"张三","age":27}
data = data_dict.popitem()
print(data_dict) # {'age': 27}
print(data) # ('name', '张三')
data = data_dict.popitem()
print(data_dict) # {}
print(data) # ('age', 27)
注意:Python3.6之前popitem是随机移除,Python3.6之后popitem改为移除第一个键值对。
如果多个字典中有相同的键,则取最后的字典的值。
v1 = {"k1":1,"k2":2}
v2 = {"k2":33,"k3":10}
v3 = v1|v2
print(v3) # 输出: {'k1': 1, 'k2': 33, 'k3': 10}
data_dict = {"name":"张三","age":27}
data = len(data_dict)
print(data)
字典不同于元组和列表,字典的索引是 键
- 获取值,没有键就会报错
data_dict = {"name":"张三","age":27}
print(data_dict["name"]) # 张三
print(data_dict["age"])
print(data_dict["xxx"]) # 报错,没有这个键
- 增加值,没有键就会增加
data_dict = {"name":"张三","age":27}
data_dict["gender"] = "男"
print(data_dict) # {'name': '张三', 'age': 27, 'gender': '男'}
- 修改值,有键就会更改原来的键值
data_dict = {"name":"张三","age":27}
data_dict["name"] = "李四"
print(data_dict) # {'name': '李四', 'age': 27}
- 删除值,没有键就会报错
data_dict = {"name":"张俊","age":27}
del data_dict["name"]
print(dict) # {"age":27}
注意:字典尽量使用get
取值,get
取值没有 键 不会报错。
data_dict = {"name":"张三","age":27}
for data in data_dict:
print(data) # 默认循环的是 键
# name
# age
元素必须一对一对的才能转换
v = dict(("k1","v1"))
print(v)
# {'k': '1', 'v': '1'}
v = dict(["k1","v1"])
print(v)
# {'k': '1', 'v': '1'}
v = dict([("k1","v1"),("k2","v2")])
print(v)
# {'k1': 'v1', 'k2': 'v2'}
v = dict([["k1","v1"],["k2","v2"]])
print(v)
# {'k1': 'v1', 'k2': 'v2'}
v = dict((["k1","v1"],["k2","v2"]))
print(v)
# {'k1': 'v1', 'k2': 'v2'}
v = dict((("k1","v1"),("k2","v2")))
print(v)
# {'k1': 'v1', 'k2': 'v2'}
- 字典的键必须可哈希
- 字典的值可以是任意类型
data = {"name":"张三","age":27,"hobby":['足球','篮球']}
print(data)
data = {"name":"张三","age":27,"hobby":('足球','篮球')}
print(data)
data = {"name":"张三","age":27,"hobby":['足球','篮球']}
print(data)
data = {"name":"张三","age":27,"hobby":{
'motion':['足球','篮球'],
'video':['白日焰火','猫和老鼠'],
}}
print(data)
15、其他
因为底层存储原理,字典只是对键进行哈希值比较,所以根据 键 查找 值,查找效率非常高(只有数据量大了才明显)。
标签:27,name,age,数据类型,print,dict,类型,data,字典 From: https://www.cnblogs.com/tangyouwei/p/data-type-dictionary-type-z26jjrh.html