字典的使用

列表可以存储任意数据类型,但是一般情况下,我们都存储单一数据类型

names = ['张三','lisi','wangwu']
scores = [100,98,80,60]
persons = ['张三','18,89,78,99']

列表只能存储值,但是无法对值进行描述

  • 字典不仅可以保存值,还能对值进行描述
  • 使用大括号来表示一个字典,不仅有值value,还有值的描述key
  • 字典里的数据都是以键值对key-value的形式保留
  • key 和 value之间使用冒号:连接
  • 多个键值对之间使用逗号,来分割
person = {'name':'zhangsan',
    'age':18,
    'math':98,
    'Chinese':95
}
print(person)

字典使用注意事项

  1. 字典里的key不允许重复,如果key重复了,后一个key的值会覆盖前一个
  2. 字典里的value可以是任意数据类型,但是key只能使用不可变数据类型,一般使用字符串
person = {'name':'zhangsan',
    'age':18,
    'height':180, 
    'age':20,  # 会替换上一个age的值
    'isPass':True, #值可以是布尔值
    'hobbies':['唱','跳','篮球'],#value可以是列表
    4:'good',
    ('yes','ss'):100
    #['yes','ss']:100  # key只能是不可变数据类型,列表是可变数据类型会报错(TypeError: unhashable type: 'list')
    }
print(person)

字典的增删改查

person = {'name':'zhangsan','age':18,'x':'y'}
# 查找数据(字典的数据在保存时,是无序的,不能通过下标来获取)
print(person['name'])  #使用key获取到对应的value
x = 'age'
print(person[x])
print(person['x'])

#print(person['height'])  # 如果要查找的key不存在,会直接报错

# 需求:获取一个不存在的key时,不报错,如果这个key不存在,使用默认值
# 使用字典的get方法

print(person.get('height','female'))   # 如果根据key获取不到value,使用给定的默认值,没有给默认值,是none默认
#只是使用了默认值,并没有添加到字典里面 

print(person.get('name','lisi'))  
print(person)

# 直接使用key可以修改对应的value

person['name'] = 'lisi'
print(person)

person['gender'] = 'female'

# 如果key存在,是修改key对应的value
# 如果key不存在,会往字典添加一个新的key-value

print(person)

# pop删除键值对
person.pop('name')
print(person)

# popitem 删除最后的一个元素,结果是被删除的这个元素组成的键值对
result = person.popitem()
print(result)
print(person) 


# update方法的使用
a = {'name':'zhangsan','age':18}
b = {'addr':'襄阳','height':180}

a.update(b)
print(a)

#扩展复习 

# 列表可以使用extend方法将两个列表合并成为一个列表
nums1 = [1,2,3,4]
nums2 = [4,5,6,7]
nums1.extend(nums2)
print(nums1)
print(nums1 + nums2)

word1 = ('hello','world')
word2 = ('yes','ok')

print(word1 + word2)

# print(a + b)   # TypeError: unsupported operand type(s) for +: 'dict' and 'dict' 字典不能使用加法+

# 字典的遍历
person =  {'name':'zhangsan','age':18,'x':'y'}

#特殊在列表和元组是一个单一的数据,但是字典是键值对的形式

# 第一种遍历的方式:直接for...in循环字典
for x in person: # 循环获取到的是key
    print(x)

# 第二种方式:获取所有的key,然后再遍历key,根据key获取value

for k in person.keys():
    print(k)

# 第三种方式:获取到所有的value 
for v in person.values(): #只能拿到值,不能拿到key,所以一般不用
    print(v)

# 第四种遍历方式
for item in person.items():
    print(item[0],'=',item[1])

for k,v in person.items():
    print(k,'=',v)

字典练习题

chars = ['a','c','x','d','p','a','m','q','s','t','p','a','t','c']

# 把字符的次数组成一个字典

char_count = {}
for char in chars:
    if char in char_count:
        char_count[char] += 1
    else:
        char_count[char] = 1
print(char_count)

persons = [
    {'name':'zhangsan','age':18},
    {'name':'lisi','age':20},
    {'name':'wanger','age':17},
]

# 让用户输入姓名,如果姓名已存在,提示用户,如果姓名不存在,继续输入年龄,并存入列表里

x = input("请输入姓名:")
for person in persons:
    if person['name'] == x:
        print("名字已存在")
        break
else:
    print('您输入的名字不存在')
    new_person = {'name':x}
    y = input('请输入您的年龄:')
    new_person['age'] = y

    persons.append(new_person)
print(persons)

# 字典推导式

dict1 = {'a':100,'b':200,'c':300}

dict2 = {v: k for k,v in dict1.items()}
print(dict2)

# 字典推导式是{}  列表推导式是[]