python基础补漏-字典和浮点型

6,字典(dict)

字典是 无序键不重复 且 元素只能是键值对可变的容器

data = { "k1":1,  "k2":2 }
  • 容器

  • 元素必须键值对

  • 键不重复,重复则会被覆盖

    data = { "k1":1, "k1":2 }
    print(data) # {"k1":2}
  • 无序(在Python3.6+字典就是有序了,之前的字典都是无序。)

    data = { "k1":1,  "k2":2 }
    print(data)

    6.1 定义

    字典中对键值得要求:

    • 键:必须可哈希。 目前为止学到的可哈希的类型:int/bool/str/tuple;不可哈希的类型:list/set/dict。(集合)

    • 值:任意类型。

    data_dict = {
        "木木":18,
         A : 50
        123:5,
        (3, 6, 9):["木木","小林"]
    }

    一般在什么情况下会用到字典呢?

    当我们想要表示一组固定信息时,用字典可以更加的直观,例如:

    # 用户列表
    user_list = [ ("mm","18"), ("amin","999") ]
    user_list = [ {
        "name":"mm",
        "pwd":"693"}, 
        {
            "name":"clic",
            "pwd":"789"
        } ]

    6.2独有功能

    1,获取值

    user = {
        "name":"mm",
        "pwd":"693",
        "name":"clic",
        "pwd":"789",
        }
    ​
    player = user.get("name")   #键不存在,则返回None
    print(player)

    2,所有的键

    user = {
        "name":"mm",
        "pwd":"693",
        "name":"clic",
        "pwd":"789",
        }
    data = user.keys()
    print(data)

    注:在python2中字典.keys()直接获取的是列表,在python3中返回的是高仿列表,且这个高仿列表可以被循环

user = {
    "name":"mm",
    "pwd":"693",
    "name":"clic",
    "pwd":"789",
    }
for ele in user.keys():
    print(ele)

3,所有的值

user = {
    "name":"mm",
    "pwd":"693",
    "name":"clic",
    "pwd":"789",
    }
data = user.values()
print(data)

注:在python2中字典.values()直接获取的是列表,在python3中返回的是高仿列表,且这个高仿列表可以被循环

4,所有的键值

user = {
    "name":"mm",
    "pwd":"693",
    "name":"clic",
    "pwd":"789",
    }
​
for item in user.items():
    print(item[0], item[1]) # item是一个元组 (键,值)

5,设置值

user = {
    "name":"mm",
    "pwd":"693",
    "name":"clic",
    "pwd":"789",
    }
user.setdefault("age", 18)
print(user)

6,更新字典键值对

user = {
    "name":"mm",
    "pwd":"693",
    "name":"clic",
    "pwd":"789",
    }
user.update({"age":18, "li":88})    #字典user中没有的键直接添加,有的键则更新值
print(user)

7,移除指定键值对

user = {
    "name":"mm",
    "pwd":"693",
    "name":"clic",
    "pwd":"789",
    }
user.pop({"pwd":"789"}) #会有返回值,可以用变量接收
print(user)

8,按照顺序移除(后进先出)

user = {
    "name":"mm",
    "pwd":"693",
    "name":"clic",
    "pwd":"789",
    }
data = user.popitem({"pwd":"789"})  
​
print(user)
print(data) 
  • py3.6后,popitem移除最后的值。

  • py3.6之前,popitem随机删除。

6.3公共功能

1,求并集(Python3.9新加入)

v1 = {"a": 1, "b": 3}
v2 = {"a": 2, "c": 4}
​
v3 = v1 | v2        #如果有重复的,|后面的字典的值就会把前面字典的值覆盖
print(v3) 

2,长度

v1 = {"a": 1, "b": 3}
d = len(v1)
print(d)

3,是否包含

v2 = {"a": 2, "c": 4}
v1 = "a" in info
print(v1)
​
v3 = "c" in v2.keys()
print(v2)
​
if "a" in v2:
    pass
else:
    pass

4,索引(键)

字典不同于元组和列表,字典的索引是,而列表和元组的所有则是 0、1、2等数值

v1 = {"a": 1, "b": 3}
​
print(v1["a"])      #通过键为索引时,键不存在会报错,建议用get方法获取值

5,根据键 修改值 和 添加值 和 删除键值对

v1 = {"a": 1, "b": 3}
#修改
v1["a"] = "2"
​
#增加
v1["c"] = 4
​
#删除
del v1["b"]
v1.pop("b")
#以上操作想看结果需打印

6,for循环

v = {"a": 1, "b": 3}
#取所有键
for key in v:
    print(key)
​
for ietm in v.keys():
    print(item)
     
#取所有值
for value in v.value()
    print(value)
    
#取所有键和值
for key, value in v.items():
    print(key, value)

6.5转换

l = dict(list/set/tuple)

其他

1,存储原理

字典把键通过哈希处理,得到的数值求余得到存储位置,与集合类似,速度就很快

2,嵌套

字典:

字典的键必须可哈希(list/set/dict不可哈希)

字典的值可以是任意类型

字典的键和集合的元素在遇到布尔值和1,0时,要注意重复的情况

元组的元素不可以被替换

#练习题
""" SH601778,股票名称:中国晶科、当前价:6.29、涨跌额:+1.92。
    SH688566,股票名称:吉贝尔、当前价:"""
​
header = ['股票名称', '当前价', '涨跌额']
stock_dict = {
    'SH601778': ['中国晶科', '6.29', '+1.92'],
    'SH688566': ['吉贝尔', '52.66', '+6.96'],
    'SH688268': ['华特气体', '88.80', '+11.72'],
    'SH600734': ['实达集团', '2.60', '+0.24']
}
#先把字典的键和值取出来
for key,value in stock_dict.items():
    # print(key, value)
​
    l = []
    for index in range(len(header)):
        t = "{}:{}".format(header[index], value[index])
        # print(t)
        l.append(t)
        re = '、'.join(l)
        msg = "{},{}。".format(key, re)
    print(msg)

7,浮点型

1,类型转换时,浮点型转换为整型,会将小数部分去掉

2,保留小数后n位

a = 3.117456
b = round(a,4)
print(b)#保留a后四位小数点同时还会四舍五入,结果:3.1175

3,因为浮点型的储存原理,所以会导致不够精准

3.1,浮点型会直接转换为二进制

3.2,让小数部分一直乘2,小于1则用结果继续乘,大于1则结果减1继续乘,等于1则结束

3.3,将得到的二进制用科学计数法表示,小数点前只保留一位

3.4,存储在电脑上,以32位为例,分为sign(1),exponent(8),fraction(23)

sign(1) 存正负,正数就存0,负数就存1

exponent(8) 存指数部分,可表数据范围:0-255,负数范围:-126~127,计算时让[指数+127]得到的值转换为二进制存储在这就行

fraction(23) 存科学计数法中小数点后的小数部分,因为最多存23位,所以导致不准确

4,需要精确小数计算时:

import decimal
​
a = decimal.Decimal("0.111")
b = decimal.Decimal("0.222")
c = a + b
print(c) #0.333
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值