字典

发布时间 2023-11-28 16:37:11作者: 小满三岁啦

定义一个字典

# 方式1 直接使用一个空字典
data_dict = {}

# 方式2 使用定义字典的关键字
data_dict = dict()

字典的取值

# 方式1 通过dict[key]的方式去取值

data_dict = {
    "name": "小满",
    "age": 3
}

info = data_dict['name']
print(info)  # 小满
# 如果key 不在字典中 使用dict[key]的方法会报错
data_dict = {
    "name": "小满",
    "age": 3
}

info = data_dict['sex']
print(info)  # KeyError: 'sex'
# 方式2 通过dict.get(key)的方式去取值

data_dict = {
    "name": "小满",
    "age": 3
}

info = data_dict.get("name")
print(info)  # 小满
# 通过dict.get(key)的方式,如果key不在指定中,并不会报错

data_dict = {
    "name": "小满",
    "age": 3
}

# 情况1、未给get设置第二个参数
info = data_dict.get("sex")
print(info)  # None

# 情况2、给get设置了第二个参数
info = data_dict.get("sex", "女")
print(info)  # 女

嵌套取值

data_dict = {
    "战士": ["小满", {"姓名": "小满", "年龄": 3, "台词": ["别羡慕,我可是凭本事摸鱼的!", "武道没有定势啊,人生…亦是如此!"]}],
    "法师": {"王昭君": {"姓名": "王昭君", "年龄": 4, "台词": ("凛冬已至", "故乡的梅花,开了吗?")}},
}
name = data_dict.get("战士")[0]
word = data_dict.get("战士")[1]["台词"][-2]

print(name)  # 小满
print(word)  # 别羡慕,我可是凭本事摸鱼的!
name = data_dict.get("法师")["王昭君"]["姓名"]
age = data_dict.get("法师")["王昭君"]["年龄"]
word = data_dict.get("法师")["王昭君"]["台词"][0]

print(name)  # 王昭君
print(age)  # 4
print(word)  # 凛冬已至

字典的常用方法

clear方法

data_dict = {
    "name": "小满",
    "age": 3
}

print(data_dict)  # {'name': '小满', 'age': 3}

data_dict.clear()
print(data_dict)  # {}

copy方法

data_dict = {
    "name": "小满",
    "age": 3
}

hero_dict = data_dict.copy()

print(hero_dict)  # {'name': '小满', 'age': 3}
print(data_dict)  # {'name': '小满', 'age': 3}

pop方法

data_dict = {
    "name": "小满",
    "age": 3
}

# pop中传入要删除的键,返回键对应的值
hero = hero_dict = data_dict.pop("name")
print(hero)  # 小满
print(data_dict)  # {'age': 3}
data_dict = {
    "name": "小满",
    "age": 3
}

# 如果key不在dict中,然后pop第二个参数不指定默认值
# 结果会报错
sex = hero_dict = data_dict.pop("sex")
print(sex)  # KeyError: 'sex'
data_dict = {
    "name": "小满",
    "age": 3
}

# 如果key不在dict中,然后pop第二个参数指定了默认值
# 会返回指定的值,原字典不会删除数据
sex = hero_dict = data_dict.pop("sex", "女")
print(sex)  # 女
print(data_dict)  # {'name': '小满', 'age': 3}

setdefault

data_dict = {
    "name": "小满",
    "age": 3
}

# setdefault 设置字典的默认值,如果存在,则不修改,如果不存在则新增
# 返回修改后字典对应的value,若已经存在原字典中,则直接返回原字典的value
# setdefault可以设置第二个参数,如果不设置,新增的键值对中的值为None
value = data_dict.setdefault("sex")

print(value)  # None
print(data_dict)  # {'name': '小满', 'age': 3, 'sex': None}
data_dict = {
    "name": "小满",
    "age": 3
}

# 指定了第二个值
value = data_dict.setdefault("sex", "女")

print(value)  # 女
print(data_dict)  # {'name': '小满', 'age': 3, 'sex': '女'}
data_dict = {
    "name": "小满",
    "age": 3
}

value = data_dict.setdefault("name", "王昭君")
print(value)  # 小满
print(data_dict)  # {'name': '小满', 'age': 3}

items

data_dict = {
    "name": "小满",
    "age": 3
}

items = data_dict.items()

print(items)  # dict_items([('name', '小满'), ('age', 3)])
print(type(items))  # <class 'dict_items'>
print(list(items))  # [('name', '小满'), ('age', 3)]
for key, value in items:
    print(key, value) 
    # name 小满
    # age 3

values

data_dict = {
    "name": "小满",
    "age": 3
}

values = data_dict.values()

print(values)  # dict_values(['小满', 3])
print(type(values))  # <class 'dict_values'>
print(list(values))  # ['小满', 3]

keys

data_dict = {
    "name": "小满",
    "age": 3
}

keys = data_dict.keys()

print(keys)  # dict_keys(['name', 'age'])
print(type(keys))  # <class 'dict_keys'>
print(list(keys))  # ['name', 'age']

popitem

# 从字典中移除一个任意的键值对,并以一个元组的形式返回被移除的键值对。

data_dict = {
    "name": "小满",
    "age": 3
}

items = data_dict.popitem()

print(items)  # ('age', 3)
print(type(items))  # <class 'tuple'>
print(data_dict)  # {'name': '小满'}
# 如果字典为空时调用 popitem() 方法,会抛出 KeyError 异常。

data_dict = {}
items = data_dict.popitem()

# 结果报错:KeyError: 'popitem(): dictionary is empty'

fromkeys

dict.fromkeys(iterable, value=None) 是 Python 字典(dict)的一个方法,用于创建一个新的字典,其中包含指定可迭代对象中的元素作为键,并将所有键的值设置为指定的值。

下面是 dict.fromkeys() 方法的语法:

new_dict = dict.fromkeys(iterable, value)

其中,iterable 是一个可迭代对象,用于提供字典中的键,value 是可选参数,表示要设置的值,默认为 None

使用示例:

hero_list = ["小满", "王昭君", "小乔"]
age = 3

hero_dict = dict.fromkeys(hero_list, age)
print(hero_dict)  # {'小满': 3, '王昭君': 3, '小乔': 3}

hero_dict = dict.fromkeys(hero_list)
print(hero_dict)  # {'小满': None, '王昭君': None, '小乔': None}

fromkeys() 方法通常用于快速创建具有相同默认值的字典,特别是在初始化字典时非常有用。

update

# 将一个字典的键值对更新到另一个字典中,或者向字典中添加新的键值对。

data_dict = {
    "name": "小满",
    "age": 3
}

data = {"sex": "女"}
data_dict.update(data)

print(data_dict)  # {'name': '小满', 'age': 3, 'sex': '女'}

删除字典

data_dict = {
    "name": "小满",
    "age": 3
}

print(data_dict)  # {'name': '小满', 'age': 3}

del data_dict
print(data_dict)  # NameError: name 'data_dict' is not defined