python基础5-字典

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/EngineerHe/article/details/100063614

python基础5-字典

在这里插入图片描述

数据类型

字典

字典定义、创建

字典是一种可变容器类型,且可以存储任意类型对象。字典和列表的最大的区别是字典强调的是“键值对”,key与value一一对应,字典中的存放顺序并不重要,重要的是“键”和“值”的对应关系。在字典中,要求key是唯一的,且不可变的。所以字典的特点如下:

  • 查找速度快
  • key-value序对没有顺序
  • key键不可变且唯一

字典的创建,使用 {} ,每个键值对用 :隔开,每对之间用 ,分割。还有使用dict和使用fromkeys的方法

>>> d1 = {'key':'value'}
# 使用dict()初始化字典,其中键必须是字符串
>>> d2 = dict(key='value')
# 使用dict创建时,下面的情况会出现bug
>>> key = 'name'
>>> d3 = dict(key='value')
# 这个代码,原本我们是想输出{'name':'value'},可以结果并不一样,所以使用dict初始化的时候需要注意
>>> print(d3)
{'key': 'value'}
# 使用fromkeys方法初始化字典
#初始化
>>> d4 = {}.fromkeys(['key1', 'key2'])
>>> d4
{'key1': None, 'key2': None}
>>> d5 = dict().fromkeys(['key1','key2'])
>>> d5
{'key1': None, 'key2': None}
# 初始化并赋值
>>> d6 = {}.fromkeys(['key1', 'key2'], 'value')
>>> d6
{'key1': 'value', 'key2': 'value'}
# 也可以先初始化,然后动态地添加
>> d7 = {}
>>> d7['key1'] = 'value1'
>>> d7['key2'] = 'value2'
>>> d7
{'key1': 'value1', 'key2': 'value2'}
# 使用zip函数把键列表和值列表打包成键值对一一对应的元组
>>> d8 = dict(zip(['key1', 'key2'], ['value1', 'value2']))
>>> d8
{'key1': 'value1', 'key2': 'value2'}
# 字典推导表达式
>>> d9 = {x:x**2 for x in [1,2,3]}
>>> d9
{1: 1, 2: 4, 3: 9}

访问、修改字典

字典和列表一样,是一种存储数据的容器;在列表中,可以通过下标索引来访问元素,在字典中通过键来访问它的对应值,即key:value;可以修改,添加等操作。

>>> d1 = {'type':'dict', 'code':'python'}
# 值访问
>>> d1['type']
'dict'
# 内容添加
>>> d1[1] = 2
>>> d1
{'type': 'dict', 'code': 'python', 1: 2}
# 内容修改
>>> d1['code'] = 'java'
>>> d1
{'type': 'dict', 'code': 'java', 1: 2}
# 删除元素,还可以是用del删除某个字典的key,或者删除整个字典;使用clear() 清空这个字典
>>> d1 = {'type':'dict', 'code':'python', 1:2}
>>> d1.pop('code') # d1的值为{'type': 'dict', 1: 2}
>>> del d1[1]      # d1的值为{'type': 'dict'}
>>> d1.clear()     # d1 = {}
>>> del d1
>>> print(d1)      # NameError: name 'd1' is not defined
# 如果有两个字典,可以使用update函数来更新其中某一个字典
# 从下面代码的结果上可以看出,如果d1中没有d2的元素,则添加进来;如果有,则修改为d2中的值
>>> d2 = {1:3,2:4,5:6}
>>> d1.update(d2)
>>> d1
{'type': 'dict', 1: 3, 2: 4, 5: 6}

字典的遍历

d = {'a':1, 'b':2, 'c':3}
# 遍历key值
for key in d:
    print("{} : {}".format(key, d[key]))
# 该方法和上面的方法是等价的
for key in d.keys():
    print("{} : {}".format(key, d[key]))
# 遍历value值
for value in d.values():
    print(value)
# 遍历字典项
for key_value in d.items():
    print(key_value)
# 遍历字典健值
for key,value in d.items():
    print("{} : {}".format(key, value))

字典的排序

字典的排序有两种方法,第一种是 list()函数和字典的keys()方法相结合,对产生的list排序,然后输出。第二种方法是使用内置函数sorted()进行排序,会返回排序好的键。

# 使用list()函数,和keys()相结合
d = {1:2,7:8,3:4,5:6}
d_key = list(d.keys())
d_key.sort()
for key in d_key:
    print(key, d[key])
# 使用sorted函数
for key in sorted(d):
    print(key, d[key])

判断键值是否存在

在python2中判断一个字典中某个key是否存在可以使用has_key和in两种方法,但是在python3中只有in方法,

>>> d = {'type': 'dict', 'code': 'java', 1: 2}
>>> 'code' in d
True
>>> 3 in d
False

字典中get()方法

有这样一种情况,我们想获取字典中的某一个值,但是有不确定它是否存在,那么如果直接写 dict[key]肯定是不妥当的,那么只能是先判读,然后在输出。这样写是可以的,但是在python中提供了一种方法 get(key, default=None),即若果存在直接输出结果,如果不存在,则输出为default的值。

# 获取字典中的值
d = {'code':'python'}
if 'name' in d:
    print(d['name'])
else:
    print('default')
# get()替代 if ... else ...
print(d.get('name', 'default'))

字典和列表的不同

  • 从创建方式上,列表使用的是方括号,字典使用的是花括号。
  • 字典里的对象是无序的,通过key-value来表示一种映射关系;列表中的元素是有序的,可以通过序号直接获取元素,或者通过切片操作获取多个元素。
  • 相对而言,字典更耗费空间,因为需要维护key。
  • list随着数量的正常增长要想查找元素的时间复杂度为O(n), dict不随数量而增长而变化,时间负责都为O(1)

猜你喜欢

转载自blog.csdn.net/EngineerHe/article/details/100063614