Python基础学习08-字典

本文介绍了Python字典的特点,如元素为key-value对,key必须是不可变对象,以及字典的创建、查询、修改、增加和删除操作。此外,还讲解了如何为字典中指定的key设置默认值,并提到了字典视图(keys、values、items)以及利用字典进行格式化字符串的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

字典的特点

  • 字典的所有元素都是一个 key-value ,通过指定的 key 总能映射到唯一确定的 value。字典中不能存在重复的key,但是可以存在重复的value
  • 字典中的元素是无序的。顺序不重要,重要的是key和value的映射关系
  • 字典中的 key 必须是不可变对象。存取字典中的 key-value,系统会调用内置函数 hash 根据指定的key 计算出value的存储位置,也就是哈希值。对于指定的key,为确保每次计算出的哈希值都是相同的,要求key必须是不可变对象,也就是说,只有不可变对象才存在哈希值。
  • 字典可以根据需要动态的伸缩,系统会根据需要动态的分配和回收内存,因此在使用前无须预先声明字典容量。
  • 字典会浪费较大内存,与列表相比,是用空间换取了时间

 

字典的创建

创建字典的常见方式有3种:

# 1、使用花括号
print({'name': 'Jack', 'age': 18})      # {'name': 'Jack', 'age': 18}

# 空字典
print({})       # {}

# 2、调用内置函数dict
print(dict({'name': 'Jack', 'age': 18}))    # {'name': 'Jack', 'age': 18}
print(dict(name='Jack', age=18))            # {'name': 'Jack', 'age': 18}
print(dict([('name', 'Jack'), ('age', 18)]))    # {'name': 'Jack', 'age': 18}
print(dict(zip(range(3), 'ABC')))           # {0: 'A', 1: 'B', 2: 'C'}

# 空字典
print(dict())   # {}

# 3、调用 dict 的方法 fromKeys
# 调用该方法时通过参数指定所有的key,所有value的默认值都是None
print(dict.fromkeys(['name', 'age']))       # {'name': None, 'age': None}
print(dict.fromkeys(('name', 'age')))       # {'name': None, 'age': None}

# 调用该方法时,可以通过参数指定所有value的值
print(dict.fromkeys(['name', 'age'], 'N/A'))    # {'name': 'N/A', 'age': 'N/A'}

 

字典的 “查” 操作

# 1、使用中括号
d = {'name': 'Jack', 'age': 18}

print(d['name'])        # Jack
# 如果字典中不存在指定的key,抛出 KeyError
# print(d['gender'])      # KeyError: 'gender'

# 2、调用方法get
print(d.get('name'))    # Jack
# 如果字典中不存在指定的key,返回 None
print(d.get('gender'))  # None
# 调用get方法时可以通过参数指定默认 value,在key不存在时将其返回
print(d.get('gender', '男'))     # 男

# 可以使用运算符 in (not in) 来检查字典中是否存在指定的 key
print('age' in d)       # True
print('gender' in d)    # False
print('gender' not in d)    # True

 

字典的 “改” 操作

# 1、为已经存在的 key 赋予一个 value 值,一次只修改一个key对应的value
d = {'name': 'Jack', 'age': 18, 'gender': '男'}

d['age'] = 20
print(d)        # {'name': 'Jack', 'age': 20, 'gender': '男'}

# 2、调用方法 update() ,第一至少修改一个key对应的value
d = {'name': 'Jack', 'age': 18, 'gender': '男'}
d.update({'name': 'Mike', 'age': 20})
# d.update([('name', 'Mike'), ('age', 20)])
# d.update(name='Mike', age=20)
print(d)        # {'name': 'Mike', 'age': 20, 'gender': '男'}

 

字典的 “增” 操作

# 1、为不存在的key赋予一个value值,一次只添加一个key-value对
d = {'name': 'Jack', 'age': 18}

d['gender'] = '男'
print(d)        # {'name': 'Jack', 'age': 18, 'gender': '男'}

# 2、调用方法update,一次至少添加一个key-value对
d = {'name': 'Jack', 'age': 18}

d.update({'gender': '男', 'score': 90})
d.update([('gender', '男'), ('score', 90)])
d.update(gender='男', score=90)
print(d)        # {'name': 'Jack', 'age': 18, 'gender': '男', 'score': 90}

 

字典的 “删” 操作

# 1、调用方法 pop ,一次只删除一个指定的key-value对
# 该方法返回指定的 key 对应的 value
d = {'name': 'Jack', 'age': 18, 'gender': '男'}
print(d.pop('age'))     # 18
print(d)        # {'name': 'Jack', 'gender': '男'}

# 如果指定的key不存在,抛出 KeyError
# d.pop('score')      # KeyError: 'score'

# 为了防止指定的key不存在时抛出KeyError,我们可以通过参数指定一个默认返回的value
print(d.pop('score', 90))       # 90
print(d)        # {'name': 'Jack', 'gender': '男'}


# 2、使用del语句 ,一次只删除一个指定的key-value对
d = {'name': 'Jack', 'age': 18, 'gender': '男'}
del d['name']
print(d)        # {'age': 18, 'gender': '男'}

# 3、调用方法 popitem()  ,一次只删除一个任意的 key-value对
# 该方法返回被删除的 key-value对
d = {'name': 'Jack', 'age': 18, 'gender': '男'}
print(d.popitem())  # ('gender', '男')
print(d)        # {'name': 'Jack', 'age': 18}


# 4、调用方法 clear 清空字典
d = {'name': 'Jack', 'age': 18, 'gender': '男'}
d.clear()
print(d)    # {}

为字典中指定的key设置默认的value值

为了确保字典中指定的key总是存在,可以调用方法 setdefault,这样:如果字典中存在指定的key,返回指定的key对应的value,字典不发生变化;如果字典不存在指定的key,该方法返回指定的默认value值,字典中添加一个key-value对

d = {'name': 'Jack'}
print(d.setdefault('name', 'defaultName'))  # Jack
print(d)        # {'name': 'Jack'}

print(d.setdefault('age', 18))  # 18
print(d)    # {'name': 'Jack', 'age': 18}

字典的视图

得到字典相关视图的3个方法:

  • keys:返回字典所有key的视图
  • values:返回字典所有value的视图
  • items:返回字典所有key-value对的视图
d = {'name': 'Jack', 'age': 18}

keys = d.keys()
print(keys)         # dict_keys(['name', 'age'])
print(list(keys))   # ['name', 'age']

values = d.values()
print(values)           # dict_values(['Jack', 18])
print(list(values))     # ['Jack', 18]

items = d.items()
print(items)            # dict_items([('name', 'Jack'), ('age', 18)])
print(list(items))      # [('name', 'Jack'), ('age', 18)]

# 视图会随字典的变化而变化
d.pop('age')
print(d)    # {'name': 'Jack'}

print(list(keys))       # ['name']
print(list(values))     # ['Jack']
print(list(items))      # [('name', 'Jack')]

借助字典创建格式化字符串

# 1、使用百分号作为占位符

phonebook = {'张三': 13333333333,
             '李四': 14444444444,
             '王五': 15555555555,
             '赵六': 16666666666}

print('王五的号码:%s,张三的号码:%s' % (phonebook['王五'], phonebook['张三']))
# 王五的号码:15555555555,张三的号码:13333333333

"""
当字符串中的占位符是百分号,并且占位符对应的实际值来自于某个字典的value时,可以把所有的实际值改写为字典,
同时根据字典的value对应的key在占位符%的后面添加:字典的key,
其中,字典的key会被添加一对引号。因此,如果字典的key是字符串,需要去掉字典的key自带的引号
"""
print('王五的号码:%(王五)s,张三的号码:%(张三)s' % phonebook)
# 王五的号码:15555555555,张三的号码:13333333333


# 2、使用花括号作为占位符
print('王五的号码:{},张三的号码:{}'.format(phonebook['王五'], phonebook['张三']))
# 王五的号码:15555555555,张三的号码:13333333333
print('王五的号码:{王五},张三的号码:{张三}'.format_map(phonebook))
# 王五的号码:15555555555,张三的号码:13333333333

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值