python基础 day5 字典

Day5笔记

一、字典初识

数据类型的分类:

  • 可变(不可哈希)的数据类型:列表(list)、字典(dict)、集合(set)
  • 不可变(可哈希)的数据类型:字符串(str)、布尔值( bool)整数(int)、元组(tuple)

容器型数据类型:字典(dict)
{}括起来,以键值对形式存储的容器型数据类型
如下字典:
'jason'、'carly'就是字典的键,键必须是不可变的数据类型,一般用int 和str
[24, '男', 'worker'] 是字典的值,可以是任意数据类型

dict1 = {
    'jason': [24, '男', 'worker'],
    'carly': [21, '女', 'student']
}
print(dict1)

字典在3.5x版本之前是无序的
字典在3.6x会按照初次建立字典的顺序排列,学术上不认为是有序的
字典在3.7x以后都是有序的

字典的优点:查询速度非常快,存储关联性的数据
字典的缺点:以空间换时间

1.字典的创建方式

# 方式一
dict1 = dict((('jason', 1), ('carly', 2), ('kobe', 3)))
print(dict1)

# 方式二
dict2 = dict(jason=1, carly=2, kobe=3)
print(dict2)

# 方式三
dict3 = dict({'jason': 1, 'carly': 2, 'kobe': 3})
print(dict3)

2.字典增删改查

dic = dict({'name': 'jason', 'age': 24})

# 1.直接增加 
#有则改之,无则加之
dic['sex'] = '男'
dic['age'] = 888
print(dic)


# 2.setdefault()
# setdefault()中的键有则不变,无则加之
dic.setdefault('hobby', 'sleep')
print(dic)

dic = dict({'name': 'jason', 'age': 24})

# 1.pop()
# 按照键删除键值对,返回该键对应的值
ret = dic.pop('age')
print(ret)
print(dic)
# 设置第二个参数则无论字典中有无此键,都不会报错,并且返回的是设置的第二个参数
ret1 = dic.pop('job', 'aloha')
print(ret1)
print(dic)


# 2.del
# 如果删除的键不存在,程序报错
del dic['name']
print(dic)
del dic['job']
print(dic)


# 3.clear()
# 清空字典中的内容
dic.clear()
print(dic)

dic = dict({'name': 'jason', 'age': 18})

# 方法一:和直接增加键值对方式一样,有则改之,无则加之
dic['name'] = 'carly'
print(dic)


# # 方法二:update()
# 1.update()可以跟多个键值对,字典中有的就修改,没有的就添加进去
dic = dict({'name': 'jason', 'age': 18})
dic.update(name='carly', height=175, hobby='sleep')
print(dic) # 结果为 {'name': 'carly', 'age': 18, 'height': 175, 'hobby': 'sleep'}

# 2.update()里面用由多个元组组成的列表,每一个元组就是一个键值对
dic = {'name': 'jason', 'age': 18}
dic.update([(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')])
print(dic) # {'name': 'jason', 'age': 18, 1: 'a', 2: 'b', 3: 'c', 4: 'd'}

# 3.update()可以将字典2更新到字典1中,若字典2中的键字典1中也有,则把字典1中该键对应的值改为字典2中的值
							   # 若字典2中的键字典1中没有,则直接把该键值对添加到字典1中
dic1 = {"name": "jason", "age": 18, "sex": "male"}
dic2 = {"name": "carly", "weight": 75}
dic1.update(dic2)
print(dic1)  # {'name': 'carly', 'age': 18, 'sex': 'male', 'weight': 75}
print(dic2)  # {'name': 'carly', 'weight': 75}

dic = dict({'name': 'jason', 'age': 24, 'girl_friend': ['carly', '小红', '小花']})

# 按照键查询(不常用)
print(dic['girl_friend'])  # 如果没有这个键会报错,一般不用此方法


# 1.get()  
# (常用方法)# 如果字典中没有查询的键,则返回None,也可以自己设置返回值
l1 = dic.get('girl_friend')
l2 = dic.get('girl_friend1', '啥也没有')
print(l1)
print(l2)


# 2. keys()
print(dic.keys())  # 返回一个特殊的数据类型,包含所有的键
print(list(dic.keys()))  # 可以转化成列表
for key in dic.keys():  # 可以遍历循环
    print(key)
for key in dic:  # 直接遍历循环字典,返回的也是所有的键
    print(key)
 

# 3. values()
print(dic.values())  # 返回一个特殊的数据类型,包含所有的键
print(list(dic.values()))
for value in dic.values():
    print(value)
    

# 4. items()
print(dic1.items())  # # 返回一个特殊的数据类型,包含所有的键值对
for i in dic.items():  # 使用items() 遍历字典,返回的是一个个元组
    print(i)
for key,value in dic.items():  # 使用元组的拆包遍历字典
    print(key, value)

二、练习

# 商品列表:
goods = [
    {"name": "电脑", "price": 1999},
    {"name": "鼠标", "price": 10},
    {"name": "游艇", "price": 20},
    {"name": "美女", "price": 998}
]
# 要求:
# 1:页面显示 序号 + 商品名称 + 商品价格,如:
#       1 电脑 1999
#       2 鼠标 10
#    ...
# 2:用户输入选择的商品序号,然后打印商品名称及商品价格
# 3:如果用户输入的商品序号有误,则提示输入有误,并重新输入。
# 4:用户输入Q或者q,退出程序。
for i in goods:
    print(goods.index(i)+1, i.get('name'), i.get('price'))
while 1:
    user_choose = input('请输入选择商品的序号:').strip()
    if user_choose.upper() == 'Q':
        break
    elif int(user_choose) <= len(goods):
        print(goods[int(user_choose)-1].get('name'), goods[int(user_choose)-1].get('price'))
    else:
        print('输入有误,重新输入')

原文地址:https://www.cnblogs.com/west-yang/p/12549585.html