Python游戏世界打怪升级之新手指引九【字典】
字典
今天我们来学习以下Python里面的字典dict,它是一种可变的、无序的键值对(key-value)集合,字典的主要特点是
- 键值对结构,每一个元素都是有一个key一个value组成的
- 键的唯一性,键必须是唯一的,如果重复;会覆盖前面的键
- 可变性,可以动态添加、删除、修改键值对
- 无序性,没有固定的顺序(3.7以上版本会保持插入顺序)
字典的创建
分为以下几种方法
- 花括号{}
- dict()函数创建
- 字典推导式
- zip()函数
# 花括号
dict_1 = {'jack': 4098, 'sjoerd': 4127}
print(dict_1) # {'jack': 4098, 'sjoerd': 4127}
# dict()函数创建,下面两种方式是等价的
dict_1 = dict([('foo', 100), ('bar', 200)])
dict_2 = dict(foo=100, bar=200)
print(dict_1) # {'foo': 100, 'bar': 200}
print(dict_2) # {'foo': 100, 'bar': 200}
# 字典推导式
dict_3 = {x:x ** 2 for x in range(5)}
print(dict_3) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# zip()函数
dict_4 = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
print(dict_4) # {'one': 1, 'two': 2, 'three': 3}
字典的使用
# 字典的使用
# list(d),返回字典d的键列表
print(list(dict_4)) # ['one', 'two', 'three']
# d[key]访问字典的
print(dict_4['one']) # 1
# d[k] = value 可以进行修改;还可以添加新的键值对
dict_4['one'] = 100
print(dict_4) # {'one': 100, 'two': 2, 'three': 3}
dict_4["city"] = "New York" # 添加新的键值对
print(dict_4) # 输出: {'one': 100, 'two': 2, 'three': 3, 'city': 'New York'}
# d[key],返回字典d中以key为键的项,不存在则报错
# print(dict_4['two1']) # KeyError: 'two1'
# d.get(key, default=None),避免报错使用get,没有的话会返回default的默认值
print(dict_4.get('123')) # None
print(dict_4.get('111','womeiyou')) # womeiyou
# del d[key],删除;如果映射中不存在 key 则会引发 KeyError
del dict_4['one']
print(dict_4) # {'two': 2, 'three': 3, 'city': 'New York'}
# pop(key,default)删除,如果 key 存在于字典中则将其移除并返回其值,否则返回 default。
# 如果 default 未给出且 key 不存在于字典中,则会引发 KeyError。
pop_dict = dict_4.pop('two')
print(pop_dict) # 2
print(dict_4) # {'three': 3, 'city': 'New York'}
# clear() 移除字典中的所有元素。
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
my_dict.clear() # 清空字典
print(my_dict) # 输出: {}
字典的常用操作
# 字典的常用操作
# keys(),获取字典中的所有的key
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
print(my_dict.keys()) # 输出: dict_keys(['name', 'age', 'city'])
# values(),获取字典中所有的value
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
print(my_dict.values()) # 输出: dict_values(['Alice', 25, 'New York'])
# items() 方法获取字典中所有的键值对
my_dict = {"name": "Alice", "age": 25, "city": "New York"}
print(my_dict.items()) # 输出: dict_items([('name', 'Alice'), ('age', 25), ('city', 'New York')])
# len(d),返回字典d的项数
print(len(dict_4)) # 3
# copy(),字典的浅拷贝
my_dict = {"name": "Alice", "age": 25}
new_dict = my_dict.copy()
print(new_dict) # 输出: {'name': 'Alice', 'age': 25}
print(id(my_dict)) # 2058496698688
print(id(new_dict)) # 2058498797184
# update():用另一个字典的键值对更新当前字典,覆盖原有的键
my_dict = {"name": "Alice", "age": 25}
my_dict.update({"city": "New York", "age": 26})
print(my_dict) # 输出: {'name': 'Alice', 'age': 26, 'city': 'New York'}
# setdefault(key, default=None) 如果字典存在键 key ,返回它的值。
# 如果不存在,插入值为 default 的键 key ,并返回 default 。 default 默认为 None
my_dict = {"name": "Alice", "age": 25}
dict_5 = my_dict.setdefault("name")
print(dict_5) # Alice
dict_6 = my_dict.setdefault("city", "New York")
print(dict_6) # New York
print(my_dict) # {'name': 'Alice', 'age': 25, 'city': 'New York'}
iter(d)
# iter(d) 返回以字典的键为元素的迭代器。 这是 iter(d.keys()) 的快捷方式
# 获取字典的迭代器
iter_dict = iter(my_dict)
# next()逐个访问,如果迭代器已经遍历完所有元素,再调用 next() 会引发 StopIteration 异常
print(next(iter_dict)) # name
print(next(iter_dict)) # age
print(next(iter_dict)) # city
# print(next(iter_dict)) # StopIteration
# 也可以使用for循环
for k in iter(my_dict):
print(k, my_dict[k])
"""
name Alice
age 25
city New York
"""

浙公网安备 33010602011771号