乐趣区

关于Python之路:Python之路day05字典增删改查keysvaluesitems

前言时刻

上午讲的好多呀,信息量有点大,次要讲字典

来来总结:

明天次要讲了字典的创立、增:setdefault、删:pop、del、改、查:get

以及 dic.keys()、dic.values()、dic.items()

字典

字典的特点是由键值对组成,其中键是可哈希的,个别是 int、str,而值能够是任意数据类型,不可哈希。长处是查问速度快,然而存储空间较大,典型的用空间复杂度换工夫。

从 3.6X 版本以来,字典默认有序,程序依照字典建设前后程序。

1、创立字典

# 1、最罕用
dic = {'name': 'come', 'hobby': [1, 2, 3], 'age': 18}   # {'name': 'come', 'hobby': [1, 2, 3], 'age': 18}

# 2、拆包创立字典
dic2 = dict((('name', 'come'), ('age', 18)))   # {'name': 'come', 'age': 18}

# 3、传入键值创立
dic3 = dict(name="come", age=18)   # {'name': 'come', 'age': 18}

2、增

1、罕用 有则批改,无则增加。

dic = {'name': 'come'}

# 1、罕用 有则批改,无则增加
dic['age'] = 18    # {'name': 'come', 'age': 18}
dic['name'] = 'on'   # {'name': 'on', 'age': 18}

2、setdefault 有则不变,无则增加。

dic = {'name': 'come'}

# 2、setdefault 有则不变,无则增加
dic.setdefault('hobby', '看电影')   # {'name': 'on', 'age': 18, 'hobby': '看电影'}
dic.setdefault('hobby', "美食")   # {'name': 'on', 'age': 18, 'hobby': '看电影'}

3、删

1. pop 函数

dict.pop(key[,default])

  • key: 要删除的键值
  • default: 如果没有 key,返回 default 值
dic = {'name': 'come', 'hobby': [1, 2], 'age': 18}

# 1、最罕用 pop,按键删除。留神列表中 pop 是按索引删除
dic.pop('hobby')   # {'name': 'come', 'age': 18}

# 2、若删除不存在的键,可增加第二个参数并返回。相似 get 用法
res = dic.pop('address', "Sorry")
print(res)   # Sorry

2. del 函数

dic = {'name': 'come', 'age': 18}

# 2、del
del dic['age']   # {'name': 'come'}
print(dic)

del dic['address']   # 间接报错

3. clear 清空

间接清空字典,但保留字典格局

dic = {'name': 'come', 'age': 18}

dic.clear()

4、改

dic = {'name': 'come', 'hobby': [1, 2, 3], 'age': 18}

# 1、dic['name'] = 'on'
print(dic)   # {'name': 'on', 'hobby': [1, 2, 3], 'age': 18}

dic['hobby'].append(666)
print(dic)   # {'name': 'on', 'hobby': [1, 2, 3, 666], 'age': 18}

5、查

罕用 dic.get(key) 取得键值。

dic = {'name': 'come', 'hobby': [1, 2, 3], 'age': 18}

# 1、最罕用 get 
dic.get('hobby')   # [1, 2, 3]

print(dic.get('address', "Sorry"))   # Sorry

# 2、索引型
print(dic['name'])   # come

print(dic['address'])   # 间接报错

6、键值对迭代器

dic.keys():获取到字典 所有键 的迭代器对象

dic.values():获取到字典所有值的迭代器对象

dic.items():获取到字典 所有键和值元组 的迭代器对象、

dic = {'name': 'come', 'hobby': [1, 2, 3], 'age': 18}

# 1、print(dic.keys())
print(dic.values())
print(dic.items())

# dict_keys(['name', 'hobby', 'age'])
# dict_values(['come', [1, 2, 3], 18])
# dict_items([('name', 'come'), ('hobby', [1, 2, 3]), ('age', 18)])

# 2、例子 2 迭代打印内容
for key, value in dic.items():
    print(f"键:{key} 值:{value}")
"""
键:name 值:come
键:hobby 值:[1, 2, 3]
键:age 值:18
"""

Last、小试牛刀:面试题

例 1:

dic = {'hobby': [1, 2, 3], 'age': 18}

dic2 = dic.get('hobby')
dic2.append(666)

print(dic, dic2)
#????问打印 dic dic2 的后果是?# 1、{'hobby': [1, 2, 3, 666], 'age': 18} [1, 2, 3, 666]
# 2、{'hobby': [1, 2, 3], 'age': 18} [1, 2, 3, 666]

答案是 1,你写对了吗?可能你会纳闷了,为什么是 dic2 的追加一个值,而 dic 中也会变?

这就波及到深浅拷贝了,就像下面的 dic2 只是对键 “hobby” 的值援用,属于浅拷贝,并没有开拓本人的存储空间,说白了就是一个变量符号而已。当你批改 dic2 的值其实就是批改 dic 中的值,如果你只是想独自批改 dic2 的值,那就深度拷贝一下吧。

如:

import copy

# 1、深度拷贝
dic = {'hobby': [1, 2, 3], 'age': 18}

dic3 = copy.deepcopy(dic.get('hobby'))
dic3.append(666)

print(dic)  # {'hobby': [1, 2, 3], 'age': 18}
print(dic3)   # [1, 2, 3, 666]

# 能够看到 dic 并没有被批改

总结

字典的内容还行,重要的是多练多总结,就这样,今天持续

退出移动版