详解Python中的Dict

  • Post category:Python

详解Python中的Dict

Python中的Dict,即字典,是一种非常常用的数据类型。字典是一种无序的、可变的key-value对集合,其中key不可重复且必须是可哈希的数据类型,value可以为任意数据类型。本文将详细介绍字典的定义、遍历、添加删除、修改操作、排序和常用方法。

定义字典

字典可以使用{}dict()来定义,其中key和value之间使用冒号分隔,每一组键值对使用逗号分隔。

my_dict = {'name': '张三', 'age': 20, 'gender': '男'}
# 或者
my_dict = dict(name='张三', age=20, gender='男')

遍历字典

遍历字典也可以使用多种方式。可以使用for循环遍历所有的键值对,也可以使用keys()values()items()方法来分别遍历键、值、键值对。

# 遍历所有键值对
for key, value in my_dict.items():
    print(key, value)

# 遍历所有键
for key in my_dict.keys():
    print(key)

# 遍历所有值
for value in my_dict.values():
    print(value)

添加和删除键值对

添加键值对可以使用[key]方式或update()方法,删除键值对可以使用del语句或pop()方法。如果删除的键不存在,使用del语句会报错,使用pop()方法则会返回一个默认值,不会报错。

# 添加键值对
my_dict['score'] = 90
my_dict.update(course='math')  # 添加一组键值对

# 删除键值对
del my_dict['score']
my_dict.pop('course', 'not exist')  # 删除一个不存在的键,返回默认值

修改键值对

修改键值对可以直接使用[key]方式,如果key不存在,会直接添加该键值对。

my_dict['name'] = '李四'  # 修改name的值
my_dict['height'] = 1.75  # 添加height键值对

排序

字典是无序的,但是我们可以使用sorted()函数和items()方法来对字典中的键值对进行排序。排序时默认按照键的升序排列,也可以使用reverse=True参数来逆序排序。

# 按键升序排列
for key, value in sorted(my_dict.items()):
    print(key, value)

# 按值降序排列
for key, value in sorted(my_dict.items(), key=lambda x: x[1], reverse=True):
    print(key, value)

常用方法

除了上述介绍的方法外,字典还有一些常用的方法,下面介绍其中几个。

  • get(key, default=None)方法可以根据key获取对应的value,如果key不存在,会返回一个默认值,默认为None。

  • keys()方法返回所有键的列表。

  • values()方法返回所有值的列表。

  • update(other_dict)方法可以将另一个字典的键值对添加到当前字典中。

示例说明

下面通过两个示例说明字典的使用。

示例1:统计字符出现次数

s = 'hello world'
count_dict = {}
for char in s:
    if char in count_dict:
        count_dict[char] += 1
    else:
        count_dict[char] = 1
print(count_dict)

输出结果:{'h': 1, 'e': 1, 'l': 3, 'o': 2, ' ': 1, 'w': 1, 'r': 1, 'd': 1}

示例2:根据分数段统计人数

stu_dict = {'小明': 78, '小红': 92, '小刚': 85, '小李': 66, '小张': 74, '小王': 81}
score_dict = {'60~69': 0, '70~79': 0, '80~89': 0, '90~100': 0}
for name, score in stu_dict.items():
    if score >= 90:
        score_dict['90~100'] += 1
    elif score >= 80:
        score_dict['80~89'] += 1
    elif score >= 70:
        score_dict['70~79'] += 1
    else:
        score_dict['60~69'] += 1
print(score_dict)

输出结果:{'60~69': 1, '70~79': 2, '80~89': 2, '90~100': 1}