Python之路day05-字典_增删改查_keys_values_items

Posted 西园公子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python之路day05-字典_增删改查_keys_values_items相关的知识,希望对你有一定的参考价值。

前言时刻

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

来来总结:

今天主要讲了字典的创建、增: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 并没有被修改

总结

字典的内容还行,重要的是多练多总结,就这样,明天继续写。

以上是关于Python之路day05-字典_增删改查_keys_values_items的主要内容,如果未能解决你的问题,请参考以下文章

Python全栈之路Day13

python之路---05 字典 集合

python之路---05 字典 集合

day05 字典

Python_类和实例属性的增删改查操作

python-11-字典的增删改查