python 常用数据结构-字典

字典
1、 字典使用:创建

"""字典使用:创建"""
# 1、使用大括号填充键值对
dc = {'name': 'Harry Potter', 'age': 18}
print(type(dc), dc) #<class 'dict'> {'name': 'Harry Potter', 'age': 18}

# 2、使用字典构造方法
dc1 = dict()  # 空字典
dc2 = dict(name="Harry Potter", age=18)  # 关键字参数赋值
print(type(dc2), dc2)
dc3 = dict([("name", "Harry Potter"), ("age", 18)])
print(type(dc3), dc3) #<class 'dict'> {'name': 'Harry Potter', 'age': 18}

# 3、使用字典推导式
dc4 = {k: v for k, v in [("name", "Harry Potter"), ("age", 18)]}
print(type(dc4), dc4) #<class 'dict'> {'name': 'Harry Potter', 'age': 18}

2、 字典使用:访问元素

"""字典使用:访问元素"""
dc = {"name": "Harry Potter", "age": 18}
# 1、访问存在的key
print(dc["name"]) #Harry Potter
print(dc["age"]) #18

# 2、访问不存在的key,会报KeyError错误
print(dc['hobby'])

3、 字典使用:操作元素

  • 语法:dict[key] = value
  • 添加元素
    • 键不存在
  • 修改元素
    • 键已经存在
"""字典使用:操作元素"""
dc = {"name": "Harry Potter", "age": 18}
# 1、修改年龄,改为20
dc['age'] = 20
print(dc) #{'name': 'Harry Potter', 'age': 20}

# 2、新增hobby字段
dc['hobby'] = 'Magic'
print(dc) #{'name': 'Harry Potter', 'age': 20, 'hobby': 'Magic'}

4、 字典使用:嵌套字典

  • 嵌套字典
  • 字典的值可以是字典对象
"""字典使用:嵌套字典"""
dc = {"name": "Harry Potter", "age": 18, "course": {"magic": 90, "python": 80}}
# 1、获取课程Magic的值
print(dc['course']['magic']) #90

# 2、把python分数改成100分
dc['course']['python'] = 100
print(dc) #{'name': 'Harry Potter', 'age': 18, 'course': {'magic': 90, 'python': 100}}

5、 字典方法 keys()

"""字典方法 keys()"""
dc = {"name": "Harry Potter", "age": 18}
keys = dc.keys()
print(type(keys), keys) #<class 'dict_keys'> dict_keys(['name', 'age'])

# 1、遍历查看所有的键
for key in keys:
    print(key)
#name
#age

# 2、将视图对象转成列表
print(list(keys)) #['name', 'age']

6、 字典方法 values()

"""字典方法 values()"""
dc = {"name": "Harry Potter", "age": 18}
values = dc.values()
print(type(values), values) #<class 'dict_values'> dict_values(['Harry Potter', 18])

# 1、遍历查看所有的值
for value in values:
    print(value)

# 2、将视图对象转成列表
print(list(values)) #['Harry Potter', 18]

7、 字典方法 items()

"""字典方法 items()"""
dc = {"name": "Harry Potter", "age": 18}
items = dc.items()
print(type(items), items) #<class 'dict_items'> dict_items([('name', 'Harry Potter'), ('age', 18)])

# 1、遍历查看所有的项
for item in items:
    print(item)
#('name', 'Harry Potter')
#('age', 18)

# 2、将视图对象转成列表
print(list(items))#[('name', 'Harry Potter'), ('age', 18)]

8、 字典方法 get()

  • get(key)
  • 获取指定 key 关联的 value 值。
  • 入参:
    • key:字典的键,必传。
  • 返回:
    • 如果 key 存在于字典中,返回 key 关联的 value 值。
    • 如果 key 不存在,则返回 None。
  • 此方法的好处是无需担心 key 是否存在,永远都不会引发 KeyError 错误
"""字典方法 get()"""
dc = {"name": "Harry Potter", "age": 18}

# 1、访问存在的key

name = dc['name']
print(name)#Harry Potter

# 2、访问不存在的key
hobby = dc.get('hobby')
print(hobby) #None

9、 字典方法 update()

  • update(dict)
  • 使用来自 dict 的键/值对更新字典,覆盖原有的键和值。
  • 入参:
    • dc:字典对象,必传
  • 返回:None
dc = {"name": "Harry Potter", "age": 18}
dc.update({"age": 20, "hobby": "magic"})
print(dc) #{'name': 'Harry Potter', 'age': 20, 'hobby': 'magic'}

10、 字典方法 pop()

  • pop(key)
  • 删除指定 key 的键值对,并返回对应 value 值。
  • 入参:
    • key:必传
  • 返回:
    • 如果 key 存在于字典中,则将其移除并返回 value 值
    • 如果 key 不存在于字典中,则会引发 KeyError。
"""字典方法 pop()"""
dc = {"name": "Harry Potter", "age": 18}

# 1、弹出
item = dc.pop("age")
print(dc, item) #{'name': 'Harry Potter'} 18

# 2、删除不存在的key
dc.pop("hobby")  # 报错keyError

11、 字典推导式

# 未使用字典推导式的写法
dc = {'a': 1, 'b': 2, 'c': 3}
d_old = dict()
for k, v in dc.items():
    if v > 1:
        d_old[k] = v ** 2
print(d_old)

# 使用字典推导式
d_new = {k : v ** 2 for k,v in dc.items() if v > 1 }
print(d_new)

12、 实例
“”"
给定一个字典对象,请使用字典推导式,将它的key和value分别进行交换。也就是key变成值,值变成key。

输入: {‘a’: 1, ‘b’: 2, ‘c’: 3}
输出: {1: ‘a’, 2: ‘b’, 3: ‘c’}
“”"

dc = {'a': 1, 'b': 2, 'c': 3}
d_old = dict()
for k, v in dc.items():
    d_old[v] = k
print(d_old)#{1: 'a', 2: 'b', 3: 'c'}

# # 使用字典推导式
d_new = {v : k for k,v in dc.items()  }
print(d_new)#{1: 'a', 2: 'b', 3: 'c'}

13、字典的总结
字典的创建:使用大括号{}、 dict()、字典推导式
访问元素:[key]
操作元素:dict[key] = value
字典可以嵌套字典
字典的方法:

  • keys()
  • values()
  • items()
  • get()
  • update()
  • pop()