Python系统学习1-7-字典

目录

一、字典

1、概念及内存图

2、基本操作

(1)创建

(2)添加

(3)删除

(4)遍历

3、列表list和字典dict互相转换

4、练习

二、容器小结

1、种类与特征

2、Python语言有哪些数据类型

3、序列与散列

4、语法

三、练习1


一、字典

1、概念及内存图

列表:由一系列变量组成的可变序列容器
字典:由一系列键值对组成的可变散列容器
字典优势:利用(内存)空间,换取(CPU查找)时间
       键key  必须唯一且为不可变数据(字符串,数字,元组),若相同,第二个相同的key覆盖第一个(通过不可变保证唯一性)
      值value 没有限制

2、基本操作
(1)创建

# 列表善于存储单一纬度数据
list_name = ["丽丽","红红","嘿嘿"]
list_age = [20, 54, 56]
list_sex = ["女", "男", "女"]

# 字典善于存储多个维度数据
# 创建方法1:字典名 = {键1:值1,键2:值2}

dict_ll = {"name":"丽丽", "age":"20", "sex":"女"}
dict_hh= {"name":"红红", "age":"54", "sex":"男"}
dict_hs = {"name":"嘿嘿", "age":"56", "sex":"女"}

创建方法2:字典名 = dict (容器)

# 需要保质容器的每个元素必须能一分为二

list_name = ["丽丽","红红","嘿嘿"]

print(dict(list_name))

(2)添加

添加,其实就是修改(如果key在,就是修改,如果key不在,就是添加)

添加方法:字典名[键] = 值

dict_ll = {"name":"丽丽", "age":"20", "sex":"女"}

dict_ll["money"] = 10000

# 定位快,修改

dict_ll["age"] = 26

# 读取,先判断,再读取 print(dict_ll["age"])

注意:dict中根据key找value,直接定位, 字典名[键]

                     根据value找key,则需要一一遍历

(3)删除

del 字典名[键1],字典名[键2]  删除后键值对同步消失

(4)遍历
dict_ll = {"name":"丽丽", "age":"20", "sex":"女"}
# 所有key
for key in dict_ll:
    print(key)
'''
name
age
sex
'''
# 所有key
for key in dict_ll.keys():
    print(key)
'''
name
age
sex
'''

# 所有value
for value in dict_ll.values():
    print(value)
'''
丽丽
20
女
'''
# 所有键和值
for item in dict_ll.items():
    print(item)
'''
('name', '丽丽')
('age', '20')
('sex', '女')
'''
# 等价于
for key,value in dict_ll.items():  # 上述的拆包
    print(key,value)
'''
name 丽丽
age 20
sex 女
'''
# 默认打印只有key值
print(dict_ll) #['name', 'age', 'sex']
print(dict_LL.items())
3、列表list和字典dict互相转换
dict_ll = {"name":"丽丽", "age":"20", "sex":"女"}
# dict转list
print(list(dict_ll.items()))
# [('name', '丽丽'), ('age', '20'), ('sex', '女')]
# list转dict
print(dict([('name', '丽丽'), ('age', '20'), ('sex', '女')]))
# {'name': '丽丽', 'age': '20', 'sex': '女'
4、练习
# 疫情信息
list_epidemic = [
    {
        "region": "台湾", "new": 16,
        "now": 2339, "total": 16931,
    },
    {
        "region": "陕西", "new": 182,
        "now": 859, "total": 1573,
    },
    {
        "region": "浙江", "new": 2,
        "now": 505, "total": 2008,
    },
]
# --打印所有疫情信息
for i in range(len(list_epidemic)):
    print(list_epidemic[i]["region"])
    print(list_epidemic[i]["new"])

# 优化
for item in list_epidemic:
    print(item["region"])
    print(item["new"])

# --查找新增人数大于10的地区名称(将结果存入新列表)
new_list = []
for i in range(len(list_epidemic)):
    if list_epidemic[i]["new"]>10:
        new_list.append(list_epidemic[i]["region"])
print(new_list)

# 优化
new_list = []
for item in list_epidemic:
    if item["new"] > 10:
        new_list.append(item["new"])
# --查找现有人数最大的地区信息(结果为字典)
max = list_epidemic[0]["now"]
flag = 0
for i in range(0,len(list_epidemic)):
    if max <= list_epidemic[i]["now"]:
        max = list_epidemic[i]["now"]
        flag = i
print(list_epidemic[flag])
list_epidemic = [
    {
        "region": "台湾", "new": 16,
        "now": 2339, "total": 16931,
    },
    {
        "region": "陕西", "new": 182,
        "now": 859, "total": 1573,
    },
    {
        "region": "浙江", "new": 2,
        "now": 505, "total": 2008,
    },
]
# --根据现有人数对疫情信息降序(大->小)排列
for i in range(len(list_epidemic)):
    for j in range(i+1,len(list_epidemic)):
        if list_epidemic[i]["now"] < list_epidemic[j]["now"]:
            list_epidemic[i],list_epidemic[j]=list_epidemic[j],list_epidemic[i]

二、容器小结

1、种类与特征

        字符串:存储字符编码(a-97),不可变,序列

        列表list:存储变量(地址),可变,序列

        元组tuple:存储变量(地址),不可变,序列

        字典dict:存储键值对,可变,散列

# 字典想拿到第一个键值对  转换为列表/元组
dict_ll = {"name":"丽丽", "age":"20", "sex":"女"}
list_key = list(dict_ll())  # 拿到的只有键
print(list_key)
key = list_key[0]
value = dict_ll[key]

list_item = list(dict_ll.items())
print(list_item[0])

# 转成元组更好,省内存
tuple_item = tuple(dict_ll.items())
print(tuple_item[0])
2、Python语言有哪些数据类型

        可变类型:预留空间+自动扩容
            如:列表list,字典dict
            优点:操作数据方便(能够增删改)
            缺点:占用内存太大
        不可变类型:按需分配
            如:int,float,bool,str,tuple
            优点:占用内存小
            缺点:不能适应现实的变化

3、序列与散列

        序列:支持索引切片,定位数据灵活
        散列:通过键定位数据,速度最快

4、语法

                                 列表                             字典
   创建
        列表名=[数据1,数据2]                    字典名={键1:值1,键2:值2}
        列表名=list(容器)                              字典名=dict(容器)
   添加
        列表名.append(元素)                        字典名[键]=值  不可变数据才可以当键
        列表名.insert(索引,元素)
   定位
        列表名[整数]                                      字典名[键]
        列表名[开始:结束:间隔]
   删除
         del 列表名[索引或切片]                    del 字典名[键] ,键值都删除
                 注意索引越界
         列表名.remove(数据)
                 注意数据必须存在于列表中
   遍历
        for item in 列表名:                            for key in 字典:
        for i range(len(列表名)):                   for value in 字典.values():
                                                                 for k,v in 字典.items(): 

三、练习1

# 2. 在终端中获取颜色(RGBA),打印描述信息,
#     否则提示颜色不存在
#     "R" -> "红色"
#     "G" -> "绿色"
#     "B" -> "蓝色"
#     "A" -> "透明度"
dict_rgb = {"R":"红色", "G":"绿色", "B":"蓝色", "A":"透明度"}
input_rgb = input("请输入颜色:")
if input_rgb in dict_rgb:
        print(dict_rgb[input_rgb])
else:
    print("不存在")

# 3. 将列表中的数字累减
list02 = [5, 1, 4, 6, 7, 4, 6, 8, 5]
sum_last = list02[0]
for i in range(1, len(list02)):
    sum_last -= list02[i]
print(sum_last)

# 4. 在列表中查找最大值(不使用max,自定义算法实现)
#     思路:
#         假设第一个元素就是最大值
#         依次与后面元素进行比较
# #         如果发现更大值,则替换
list02 = [5, 1, 4, 6, 7, 4, 6, 8, 5]
max = list02[0]
for item in list02:
    if max < item:
        max = item
print(max)



# 5. (选做)彩票:双色球
#     红色:6个  1--33之间的整数   不能重复
#     蓝色:1个  1--16之间的整数
#     1) 随机产生一注彩票(列表(前六个是红色,最后一个蓝色))
#     2) 在终端中录入一支彩票
#     要求:满足彩票的规则.
import random
list_lottery = []
for i in range(6):
    num = random.randint(1,33)
    while num in list_lottery:
        num = random.randint(1, 33)
        list_lottery.append(num)
list_lottery.append(random.randint(1,16))

# 优化
import random
list_lottery = []
while len(list_lottery) < 6:
    num = random.randint(1, 33)
    if num not in list_lottery:
        list_lottery.append(num)
list_lottery.append(random.randint(1,16))

# 2) 在终端中录入一支彩票
#     要求:满足彩票的规则.
list_lottery = []
i = 1
while i <= 6:
    num = int(input(f"请录入红色第{i}注彩票:"))
    if 1 < num < 33:
        if num not in list_lottery:
            list_lottery.append(num)
            i += 1
        else:
            print("不能重复,请重新输入")
    else:
        print("您输入的数字超出范围1-33,请重新输入")

while True:
    num2 = int(input(f"请录入蓝色第{i}注彩票:"))
    if 1 < num2 < 6:
        list_lottery.append(num2)
        break
    else:
        print("您输入的数字超出范围1-6,请重新输入")
print(f"下注为{list_lottery}")


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chde2Wang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值