Python字典的常用方法

举报
乂氼S 发表于 2023/05/28 13:23:34 2023/05/28
【摘要】 Python字典的常用方法总结

目录

一.字典添加数据的方法

1.字符串,列表,e.g:list[0] = 10

2.update的功能与用法

3.update的功能与用法

4.setdefault的功能

5.setdefault的用法

6.注意事项

 二.获取字典的所有key——keys函数

1.keys功能

2.keys的用法

3.实战

三.获取字典的所有值values

1.values功能

2.values的用法

3.注意事项

4.实战

四.字典key的获取

1.[]的获取方法

2.get功能

3.get用法

4.[]与get的区别

5.实战

 五.字典删除

1.clear功能

2.clear用法

3.pop功能

4.pop用法

5.del函数

6.实战

六.字典copy

1.copy的功能

2.copy的用法

3.实战

七.字典成员运算符

1.in 与not in

2.get用于判断成员存在

3.实战

八.Python字典中的末尾删除函数-popitem

1.popitem功能

3.实战

4.阐明对比,del与pop的异同点

九.所有数据类型与布尔值的关系

1.数据类型与布尔值的关系



一.字典添加数据的方法

1.字符串,列表,e.g:list[0] = 10

  • 字典没有索引
  • dict[name] ='xiaoding'
  • 添加或修改,根据key是否存在所决定

2.update的功能与用法

  • 添加新的字典,如新字典中有和原字典相同的key,则该key的value会被新字典的value覆盖

3.update的功能与用法

  • 用法:
  • dict.update(new_dict)--该函数无返回值参数: new_dict: 新的字典
  • 实战:
  • # coding:utf-8
    
    user = {'name': 'dewei', 'age': 33}
    xiaomu = {'name': 'xiaomu', 'age': 23, 'top': 175, 'sex': '男'}
    print('原字典', user)
    user.update(xiaomu)
    print('新字典', user)
    
    
    value = user.setdefault('name', 'xiaoyun')
    value01 = user.setdefault('birthday', '2003-11-08')
    print(user, value, value01)
  •  输出结果:
  • 原字典 {'name': 'dewei', 'age': 33}
    新字典 {'name': 'xiaomu', 'age': 23, 'top': 175, 'sex': '男'}
    {'name': 'xiaomu', 'age': 23, 'top': 175, 'sex': '男', 'birthday': '2003-11-08'} xiaomu 2003-11-08
    
    进程已结束,退出代码0
    


4.setdefault的功能

  • 获取某个key的value,如key不存在于字典中,将会添加key并将value设为默认值

5.setdefault的用法

  • 用法:

  • dict.setdefault(key, value)
  • 参数:
  • key 需要获取的key
  • value 如果key不存在,对应这个key存入字典的默认值
  • 实战:
# 创建一个空字典
employee_salaries = {}

# 使用 setdefault() 方法设置键-值对
# 如果键 "John" 不存在于字典中,则设置 "John" 对应的值为 50000
# 如果键 "John" 已经存在于字典中,则返回 "John" 对应的值,不进行修改
john_salary = employee_salaries.setdefault("John", 50000)

# 打印结果
print("John's salary:", john_salary)  # 输出: John's salary: 50000
print("Employee salaries:", employee_salaries)  # 输出: Employee salaries: {'John': 50000}

# 再次使用 setdefault() 方法设置键-值对
# 键 "Lisa" 不存在于字典中,因此设置 "Lisa" 对应的值为 45000
# 返回值为 45000
lisa_salary = employee_salaries.setdefault("Lisa", 45000)

# 打印结果
print("Lisa's salary:", lisa_salary)  # 输出: Lisa's salary: 45000
print("Employee salaries:", employee_salaries)  # 输出: Employee salaries: {'John': 50000, 'Lisa': 45000}

# 尝试使用 setdefault() 方法设置已存在的键-值对
# 键 "John" 已经存在于字典中,因此不进行修改,并返回 "John" 对应的值 50000
john_new_salary = employee_salaries.setdefault("John", 55000)

# 打印结果
print("John's new salary:", john_new_salary)  # 输出: John's new salary: 50000
print("Employee salaries:", employee_salaries)  # 输出: Employee salaries: {'John': 50000, 'Lisa': 45000}

 在这个案例中,我们创建了一个空字典 employee_salaries。然后,我们使用 setdefault() 方法来设置键-值对。首先,我们设置了键为 "John",值为 50000。由于 "John" 之前不存在于字典中,该键-值对被成功设置,并且返回的值为设置的值 50000。然后,我们打印了 "John" 的薪水和整个字典的内容。

接下来,我们再次使用 setdefault() 方法来设置键-值对。这次,我们设置了键为 "Lisa",值为 45000。由于 "Lisa" 之前不存在于字典中,该键-值对被成功设置,并且返回的值为设置的值 45000。然后,我们打印了 "Lisa" 的薪水和整个字典的内容。

最后,我们尝试使用 setdefault() 方法设置已经存在的键-值对。这次,我们设置了键为 "John",值为 55000。由于 "John" 已经存在于字典中,该键-值对没有进行修改,并且返回的值为已存在的值 50000。然后,我们打印了 "John" 的新薪水和整个字典的内容。

通过这个案例,我们可以看到 setdefault() 方法的用法:它允许我们在字典中设置键-值对,如果键不存在则设置,如果键已经存在则返回已存在的值。这对于需要在字典中添加新值但又不希望覆盖已存在值的情况非常有用。

6.注意事项

  • 字典中每一个key一定是唯一的
  • 字典中的数据量没有限制
  • 字典中的value可以是任何python的内置数据类型的对象和自定义的对象

 二.获取字典的所有key——keys函数

1.keys功能

  • 获取当前字典中所有的键( key )

2.keys的用法

  • 用法:

  • dict.keys()->无需传参,返回一个key集合的伪列表
  • 伪列表不具备列表的所有功能,完全没有列表的功能,比如我们无法通过索引获取成员,也无法修改,以及列表中各内置函数也无法使用,比如append

Question:有没有什么办法可以让伪列表变成一个真正的列表?

我们用定义列表的函数List来帮忙,我们在list函数的括弧内书写My_dict.keys,也就是说将kevs的函数返回的伪列表以参数的形式传给list函数,并且我们将List的返回值赋值给一个新的变量,此时我们会发现伪列表前面的dict.keys不见了,变成了个真正的列表。

3.实战

  • 由 keys 获取的列表每个value都是唯一的,因为字典的每个key都是唯一的。
# 创建一个字典
student_scores = {
    "Alice": 95,
    "Bob": 80,
    "Charlie": 75,
    "David": 90,
    "Eve": 85
}

# 使用keys()函数获取字典中的所有键
keys = student_scores.keys()

# 打印字典中的所有键
print("字典中的所有键:")
for key in keys:
    print(key)

# 输出:
# 字典中的所有键:
# Alice
# Bob
# Charlie
# David
# Eve

 在上述代码中,我们首先创建了一个名为student_scores的字典,其中包含了学生姓名和对应的分数。然后,我们使用keys()函数来获取字典中的所有键,并将其赋值给变量keys。注意,keys()函数返回的结果是一个类似列表的对象,但它不是真正的列表,而是一个可迭代的视图。

接下来,我们使用一个for循环遍历keys,并逐个打印字典中的所有键。在循环内部,我们将每个键存储在变量key中,并通过print()函数将其输出到控制台。

最终的输出结果显示了字典中的所有键:Alice、Bob、Charlie、David和Eve。

使用keys()函数可以方便地获取字典中的所有键,这在需要遍历字典或对字典的键进行操作时非常有用。



三.获取字典的所有值values

1.values功能

  • 获取当前字典中所有键值对中的值(value)

2.values的用法

  • 用法:
  • dict.values()->无需传参,返回一个value集合的伪列表

3.注意事项

  • 伪列表是不能进行修改的,因为它们只是原字典视图的副本,即它们是只读的(read-only)。在 Python 中,字典的keys()、values() 和 items() 函数返回的是视图对象 (view obiects),这些视图对象是字典内容的可迭代副本,但它们没有自己的存储空间。视图对象是基于字典原对象动态生成的,所以当字典本身发生变化时,返回的视图对象也会跟着变化。因为视图对象是原字典的副本,所以对其进行更改并不会更新原字典,而只是更改其本身,因此它们是只读的,因为不允许修改原字典。同样地,对于字符串、元组等不可变类型因为它们不支持原地修改,因此它们也是只读的。由于这些对象是不可变的,因此 Python 禁止对它们进行修改,以确保程序的安全性和可维护性。

4.实战

# 创建一个包含学生成绩的字典
scores = {
    "Alice": 85,
    "Bob": 92,
    "Charlie": 78,
    "David": 95,
    "Eve": 88
}

# 使用values()函数获取字典中的所有值
score_list = scores.values()

# 打印成绩列表
print("成绩列表:", score_list)

# 遍历成绩列表并计算平均成绩
total_score = 0
for score in score_list:
    total_score += score

average_score = total_score / len(score_list)

# 打印平均成绩
print("平均成绩:", average_score)

  输出结果:

成绩列表: [85, 92, 78, 95, 88]
平均成绩: 87.6

 在上面的例子中,我们首先创建了一个字典scores,其中键是学生的姓名,值是对应的成绩。然后,我们使用values()函数获取字典中所有的值,并将其保存到score_list变量中。

接下来,我们使用一个循环遍历score_list,将每个成绩加起来计算总分。然后,我们通过将总分除以成绩数量,计算出平均成绩。

最后,我们打印了成绩列表和平均成绩。

通过这个例子,我们展示了如何使用values()函数获取字典中的值,并对这些值进行进一步的处理,如计算平均值。这说明了values()函数在处理字典数据时的实用性和灵活性。


四.字典key的获取

1.[]的获取方法

  • 字典+中括号内传key,不进行赋值操作即为获取
  • 返回key对应的value值

2.get功能

  • 获取当前字典中指定key的value

3.get用法

  • 用法:
  • dict.get(key, default=None)   # 注意!使用时需要把‘default=’省略,因为python3.0中只允许两个位置参数,此处带上只是为了更好的说明。 
  • 可以用于条件判断语句,不指定默认值,如果没有该键就不返回值,就代表空,则代表False
  • 参数:
  • key :需要获取value的key
  • default : key不存在则返回此默认值,默认是None,我们也可
    以自定义

4.[]与get的区别

  • []如果获取的key不存在,则直接报错
  • get如果获取的key不存在,则返回默认值
  • 所以开发中,优先使用get函数

关于get()方法不接受关键字参数,在Python2版本中确实是允许get()方法接受关键字参数的,但在Python3版本中,get()方法只接受两个位置参数,不接受任何关键字参数。位置参数是指在Python函数定义时声明的参数,它们按照声明顺序依次传递给函数。

5.实战

# 创建一个字典
student_scores = {'Alice': 95, 'Bob': 80, 'Charlie': 90}

# 使用 get() 函数检索键对应的值
score1 = student_scores.get('Alice')
print("Alice's score:", score1)  # 输出:Alice's score: 95

# 尝试使用不存在的键
score2 = student_scores.get('David')
print("David's score:", score2)  # 输出:David's score: None

# 使用 get() 函数,并提供默认值
score3 = student_scores.get('Eve', 0)
print("Eve's score:", score3)  # 输出:Eve's score: 0

 在上面的示例中,我们首先创建了一个名为 student_scores 的字典,它包含了学生姓名和对应的分数。然后,我们使用 get() 函数来检索字典中指定键的值。

  • 在第一个例子中,我们通过 student_scores.get('Alice') 检索了键 'Alice' 对应的值,即学生 Alice 的分数。由于 'Alice' 是存在于字典中的键,函数返回了该键对应的值 95,并将其赋值给变量 score1。最后,我们将 score1 打印出来,输出为 Alice's score: 95
  • 在第二个例子中,我们尝试使用 student_scores.get('David') 来检索一个不存在于字典中的键 'David'。由于该键不存在,get() 函数返回了 None,并将其赋值给变量 score2。最后,我们将 score2 打印出来,输出为 David's score: None
  • 在第三个例子中,我们使用 get() 函数来检索一个不存在于字典中的键 'Eve'。然而,与前面的例子不同的是,我们在 get() 函数中提供了一个默认值 0。由于 'Eve' 不存在于字典中,get() 函数返回了默认值 0,并将其赋值给变量 score3。最后,我们将 score3 打印出来,输出为 Eve's score: 0

这个示例清楚地展示了如何使用 get() 函数来检索字典中的值,并且在键不存在时提供默认值。通过使用 get() 函数,我们可以避免在访问不存在的键时引发 KeyError 异常,而是能够更好地控制程序的行为。


 五.字典删除

1.clear功能

  • 清空当前的字典中所有数据

2.clear用法

  • dict.clear()->无参数,无返回值

3.pop功能

  • 删除字典中指定的key,并将其结果返回,如果key不存在则报错

4.pop用法

  • 用法:
  • dict.pop(key)- key希望被删掉的键>>返回这个key对应的值(value )

5.del函数

  • del删除字典中的元素或整个字典

6.实战

# coding:utf-8

my_dict = {'name': 'xiaomu', 'age': 15}
deleted_elements = my_dict.pop('age')
print('被删除的元素', deleted_elements)
print('删除操作后的的字典:', my_dict)

del my_dict['name']
print(my_dict)

projects = {
    'ipad': {'name': 'ipad', 'price': 2200, 'desc': '平板电脑'},
    'ipone': {'name': 'ipone', 'price': 3000, 'desc': '智能手机'},
    'pc': {'name': 'pc', 'price': 5000, 'desc': '台式电脑'},
    'mac': {'name': 'mac', 'price': 8000, 'desc': '苹果电脑'}}

print(projects.keys())
print('一个人购买了{},价格是{}'.format(projects['pc']['name'], projects['pc']['price']))
projects.pop('pc')
print(projects.keys())

result = projects.pop('mac')
print('一个程序员构面了{},价格是{}'.format(result['name'], result['price']))
print(projects.keys())

print('{}和{}都卖出了,他们一共花费了{}元'.format(projects['ipad']['name'], projects['ipone']['name'], projects['ipad']['price'] + projects['ipone']['price']))

projects.clear()
print(projects.keys())

del projects
# print(projects)  # 会报错

  输出结果:

被删除的元素 15
删除操作后的的字典: {'name': 'xiaomu'}
{}
dict_keys(['ipad', 'ipone', 'pc', 'mac'])
一个人购买了pc,价格是5000
dict_keys(['ipad', 'ipone', 'mac'])
一个程序员构面了mac,价格是8000
dict_keys(['ipad', 'ipone'])
ipad和ipone都卖出了,他们一共花费了5200元
dict_keys([])

进程已结束,退出代码0



六.字典copy

1.copy的功能

  • 将当前字典复制产生一个新的字典 (与原字典不是相同的内存地址)

2.copy的用法

  • 用法:dict.copy()->该函数无参数,返回一个与原字典一模一样但内存地址不同的字典

3.实战

# coding:utf-8

fruits = {
    'apple': 30,
    'banana': 50,
    'pear': 100
}

real_fruits = fruits.copy()
print(real_fruits)

real_fruits['orange'] = 50
real_fruits.update({'cherry': 100})

print(real_fruits)
print('原始水果商', fruits)
real_fruits['apple'] = real_fruits['apple'] - 5
print(real_fruits)

real_fruits['pear'] -= 3
print(real_fruits)

real_fruits.clear()
print(real_fruits)

print('第二天')
real_fruits = fruits.copy()
print(real_fruits)

  输出结果:

{'apple': 30, 'banana': 50, 'pear': 100}
{'apple': 30, 'banana': 50, 'pear': 100, 'orange': 50, 'cherry': 100}
原始水果商 {'apple': 30, 'banana': 50, 'pear': 100}
{'apple': 25, 'banana': 50, 'pear': 100, 'orange': 50, 'cherry': 100}
{'apple': 25, 'banana': 50, 'pear': 97, 'orange': 50, 'cherry': 100}
{}
第二天
{'apple': 30, 'banana': 50, 'pear': 100}

进程已结束,退出代码0



七.字典成员运算符

1.in 与not in

  • 只能判断key是否存在

2.get用于判断成员存在

  • In [42]: test_dict = { 'name': 'xiaoding'}
    In [43]: bool(test_dict.get( 'name' ))
    out [43]: True

3.实战

# 创建一个字典
person = {
    'name': 'John',
    'age': 30,
    'city': 'New York'
}

# 检查键是否存在于字典中
if 'name' in person:
    print("Name is present in the dictionary.")  # 输出: Name is present in the dictionary.

# 检查键是否不存在于字典中
if 'gender' not in person:
    print("Gender is not present in the dictionary.")  # 输出: Gender is not present in the dictionary.

# 创建一个嵌套字典
employees = {
    'emp1': {'name': 'Alice', 'age': 25},
    'emp2': {'name': 'Bob', 'age': 30},
    'emp3': {'name': 'Charlie', 'age': 35}
}

# 检查嵌套字典的键是否存在
if 'emp2' in employees:
    print("Employee 'emp2' is present in the dictionary.")  # 输出: Employee 'emp2' is present in the dictionary.

# 检查嵌套字典的键和值是否存在
if 'emp3' in employees and employees['emp3']['age'] > 30:
    print("Employee 'emp3' is present and age is greater than 30.")  # 输出: Employee 'emp3' is present and age is greater than 30.

 在上述案例中,我们首先创建了一个简单的字典person,其中包含名称、年龄和城市等键值对。然后,我们使用in运算符检查'name'是否存在于字典person中,并输出相应的消息。接着,我们使用not in运算符检查'gender'是否不存在于字典中,并输出相应的消息。

接下来,我们创建了一个嵌套字典employees,其中每个键都是员工的ID,对应的值是包含姓名和年龄的字典。我们使用in运算符检查'emp2'是否存在于employees字典中,并输出相应的消息。

最后,我们结合使用in运算符和字典的键值对来检查'emp3'是否存在于employees字典中,并且检查'emp3'对应的年龄是否大于30。如果两个条件都满足,将输出相应的消息。

这个案例展示了如何使用成员运算符来检查字典中的键是否存在,并可以根据需要进行进一步的条件判断。注释详细解释了每个步骤的目的和输出结果,以便清晰理解代码的功能。



八.Python字典中的末尾删除函数-popitem

1.popitem功能

  • 删除当前字典里末尾一组键值对并将其返回

2.popitem用法

  • 用法:dict.popitem()--无需传参
  • >>返回被删除的键值对,用元组包裹,0索引是key,1索引是value
  • 注意事项:如字典为空,则直接报错

3.实战

# coding:utf-8

students = {'dewei': '到', 'xiaomu': '在', 'xiaogao': '在的'}
print('xiaogao在吗?')
xiaogao = students.popitem()
print('{} 喊 {}'.format(xiaogao[0], xiaogao[1]))
print('xiaomu在吗?')
xiaomu = students.popitem()
print('{} 喊 {}'.format(xiaomu[0], xiaomu[1]))
print('dewei在吗?')
dewei = students.popitem()
print('{}喊{}'.format(dewei[0], dewei[1]))

print(students)  # 此时字典为空
# students.popitem()

  输出结果:

xiaogao在吗?
xiaogao 喊 在的
xiaomu在吗?
xiaomu 喊 在
dewei在吗?
dewei喊到
{}

进程已结束,退出代码0


4.阐明对比,del与pop的异同点

  • 在Python中,字符串、列表和字典,它们都有del和pop方法,但是它们的方法和效果各不相同,具体情况如下:
  • 字符串的del和pop方法: 字符串不支持del方法,因为字符串是不可变的,无法删除其中的某个字符。字符串也不支持pop方法,因为pop方法是用于列表和字典的。
  • 列表的del和pop方法:列表支持del方法,可以删除其中的任何元素,包括最后一个元素和中间的元素。列表也支持pop方法,pop方法默认删除并返回列表中的最后一个元素,也可以指定索引删除指定位置的元素,并返回该元素的值。字典的del和pop方法: 字典支持del方法,可以删除其中任何一个键值对。字典也支持pop方法pop方法需要提供要删除的键值对的键,如果该键存在,则该键值对被删除并返回相应的值。如果该键不存在,pop方法还可以提供一个可选的默认值,该值将作为pop方法的默认返回值



九.所有数据类型与布尔值的关系

1.数据类型与布尔值的关系

  • 每一种数据类型,自身的值都有表示True与False
  • not 对于一切结果取反

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。