5-复合类型-字典
"""字典 dict"""
data1 = {}
print(data1, type(data1)) # {} <class 'dict'>
data2 = {
"name": "xiaoli",
"age": 25,
"sex": True,
"height": 1.80,
"email": "1234@qq.com",
"friends":[
"xiaobai", "xiaohei"
],
12: 1356
}
print(data2, type(data2))
# {'name': 'xiaoli', 'age': 25, 'sex': True, 'height': 1.8, 'email': '1234@qq.com',
# 'friends': ['xiaobai', 'xiaohei'], 12: 1356} <class 'dict'>
"""字典的格式:"""
data = {
"key": "value"
}
"""
1. 字典的成员叫键值对(key-value),每一个键值对使用英文冒号关联(映射),
每一个键值对的后面,除了末尾成员,都要使用英文逗号隔开
2. 字典里面的键值对的键(key)必须是不可变的数据类型,value可以任意的数据类型,
key一般在工作中往往使用字符串格式,少数情况下会出现数值,或者元组
3. 字典里面的键值对的键(key),在整个字典中是唯一的,重复出现,则后面的会覆盖前面
"""
data3 = {
3: "xiaoli",
3.33: "xiaobai"
}
print(data3, type(data3)) # {3: 'xiaoli', 3.33: 'xiaobai'} <class 'dict'>
data4 = {
(1,2): "xiaoli",
(1,6): "xiaobai"
}
print(data4, type(data4)) # {(1, 2): 'xiaoli', (1, 6): 'xiaobai'} <class 'dict'>
"""如果要保存多个事物的信息,就可以采用字典作为成员,组成一个列表/元组/集合"""
book_list = [
{"id": 1, "name": "浪潮之巅", "price": 89.50},
{"id": 2, "name": "人月神话", "price": 109.50},
{"id": 3, "name": "代码之髓", "price": 39.50},
]
print(book_list)
# [{'id': 1, 'name': '浪潮之巅', 'price': 89.5}, {'id': 2, 'name': '人月神话', 'price': 109.5},
# {'id': 3, 'name': '代码之髓', 'price': 39.5}]
"""字典取值"""
book = {
"price": 9.9,
"title": "西游记后传",
"publish": "人民出版社",
"authors": ["吴承恩", "小明"],
}
print(book["price"]) # 9.9
total = book["price"] * 5
print(total) # 49.5
book["pubdate"] = "2022-4-5"
print(book)
# {'price': 9.9, 'title': '西游记后传', 'publish': '人民出版社',
# 'authors': ['吴承恩', '小明'], 'pubdate': '2022-4-5'}
book["price"] = 100
print(book)
# {'price': 100, 'title': '西游记后传', 'publish': '人民出版社',
# 'authors': ['吴承恩', '小明'], 'pubdate': '2022-4-5'}
"""使用in判断指定key键是否存在于字典"""
book = {
"price": 9.9,
"title": "西游记后传",
"publish": "人民出版社",
"authors": ["吴承恩", "小明"],
}
print("price" in book) # True
print("pubdate" in book) # False
6-可变与不可变类型
"""字符串是只读类型的数据,不能修改/删除成员,不能使用del"""
"""元组是只读类型的数据,不能删除/修改成员"""
"""列表可以删除/修改一个成员的值,但是基本不使用del来操作"""
l = [1, 2, 3]
del l[-1]
print(l) # [1, 2]
"""字典可以使用del关键字删除成员(键值对)"""
book = {
"price": 9.9,
"title": "西游记",
"publish": "人民出版社",
"authors": ["吴承恩", "小明"],
}
del book["authors"]
print(book) # {'price': 9.9, 'title': '西游记', 'publish': '人民出版社'}
"""集合可以删除/修改成员,但是没有下标,自然也就谈不上del删除成员"""
s = {1, 2, 3, 4}
ret = s.pop() # 删除第一个成员
print(ret, s) # 1 {2, 3, 4}
"""按成员是否可以修改,把数据类型进行分类:
可变类型:list, dict, set
不可变类型:(int, float, bool), str, tuple"""
7-变量缓存机制
"""变量缓存机制,也可以叫内存驻留机制"""
a = 10
b = 10
print(a == b) # True
print(id(a)) # 2298746923600
print(id(b)) # 2298746923600
c = [1, 2]
d = [1, 2]
print(c == d) # True
print(id(c)) # 3062637611136
print(id(d)) # 3062633875648
"""变量缓存机制:
对于整型,可以缓存-5~正无穷范围内的相同值
对于浮点型,可以缓存正数范围内的相同值
对于布尔型,可以缓存相同的值
对于字符串相同时,可以缓存
"""
a = -5
b = -5
print(a, id(a))
print(b, id(b))
# -5 1805543565424
# -5 1805543565424
a = True
b = True
print(a, id(a))
print(b, id(b))
# True 140717406181480
# True 140717406181480
a = "werttuioplkmnhgbnxmssz"
b = "werttuioplkmnhgbnxmssz"
print(id(a))
print(id(b))
# 2764039860752
# 2764039860752
"""变量缓存机制对于容器类型:
对于元组,只有空元组一样,id一样
对于列表,集合,字典,id都不一样"""
t1 = ()
t2 = ()
print(t1, id(t1))
print(t2, id(t2))
# () 2455378346048
# () 2455378346048
t1 = (1, 2, 3, 4)
t2 = (1, 2, 3, 4)
print(t1, id(t1))
print(t2, id(t2))
# (1, 2, 3, 4) 1674709660032
# (1, 2, 3, 4) 1674709660032
# id一样
d1 = [1, 2, 3]
d2 = [1, 2, 3]
print(d1, id(d1))
print(d2, id(d2))
# [1, 2, 3] 1659173884864
# [1, 2, 3] 1659176830016
8-小数据池-A
a = None
print(a, id(a))
8-小数据池-B
"""在其他语言中,如果在不同文件/不同窗口下,创建的变量的数据即便一样,也是保存不同的内存空间中的。
# 但是,python为了达到优化的目的,会把简单的小数据(整型,浮点型,None, bool)固定在一个相同内存中,所以python不同文件的小数据,内存地址是一样的。"""
a = None
print(a, id(a))
9-判断两个数据是否同一个数据
a = 10
b = 10.0
print(a == b) # True
a = 1
b = True
print(a == b) # True
a = [1, 2]
b = [1, 2]
print(a == b) # True
"""在python中使用 == 只能判断两个数据的值是否一致,
如果要判断两个数据是否是同一个,那么还要判断内存地址是否一样"""
a = -10
b = -10
print(id(a) == id(b)) # True # 文本模式下True,交互模式下False
a = -10
b = -10
print(a is b) # True
a = [1, 2]
b = [1, 2]
print(a is b) # False
"""1. 使用is可以直接判断两个数据的值是否一样,内存地址是否同一个
2. 基于 == 只能判断两个数据的值是否一样"""
"""因为True相当于1,
所以我们会归纳 整型int,浮点型float,布尔型bool,都是数值型"""
print(True+1) # 2
10-数据类型转换
"""需要数据类型转换的情况"""
num = input("输入您购买的数量:")
unit = input("输入商品的单价:")
print(num, type(num))
print(unit, type(unit))
# 12 <class 'str'>
# 12 <class 'str'>
num = int(num)
unit = int(unit)
total = num * unit
print(total, type(total))
# 144 <class 'int'>
"""数据类型自动转换"""
data = True + 2
print(data) # 3 布尔型转换成整型
data = True + 3.0
print(data) # 4.0 布尔型转换浮点型
data = 3 * 3.0
print(data) # 9.0 整型转换成浮点型
"""强制转换数据类型"""
num = 10
price = int("5") # price = int("5个") # 这里会报错,因为只有纯数字组成的字符串才能转换
print(price * num) # 50
x = int(True)
print(x, type(x)) # 1 <class 'int'>
x = bool(1)
y = bool(0)
print(x, type(x)) # True <class 'bool'>
print(y, type(y)) # False <class 'bool'>
a = float("3.15")
print(a, type(a)) # 3.15 <class 'float'>
data = str([1, 2, 3, 4])
print(data, type(data)) # [1, 2, 3, 4] <class 'str'>
data = str({"name": "xiaoming", "age": 17})
print(data, type(data)) # {'name': 'xiaoming', 'age': 17} <class 'str'>
11-面试题或工作中的容器类型数据类型转换
"""给一个列表的数据去重"""
data = [1, 2, 3, 3, 2, 1]
set_data = set(data)
print(set_data, type(set_data)) # {1, 2, 3} <class 'set'>
list_data = list(set_data)
print(list_data, type(list_data)) # [1, 2, 3] <class 'list'>
"""修改元组的值"""
data = (100, 101, 102, 103)
list_data = list(data)
print(list_data, type(list_data)) # [100, 101, 102, 103] <class 'list'>
list_data[1] = 69
tuple_data = tuple(list_data)
print(tuple_data, type(tuple_data)) # (100, 69, 102, 103) <class 'tuple'>
"""修改集合里面的数据"""
data = {1, 2, 3}
list_data = list(data)
print(list_data) # [1, 2, 3]
"""提取字典中所有的key"""
data = {"id": 1, "name": "xiaolli", "sex": True}
keys_list = list(data)
print(keys_list) # ['id', 'name', 'sex']