day03

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']

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值