目录

一、题目描述

二、字典介绍

1.基本用法

2.特点

3.常用方法

三、解析

四、源码


一、题目描述

编写一个函数,交换指定字典的key和value

二、字典介绍

1.基本用法

    对于初学者而言,应牢记字典包含多个 key-value 对,而 key 是字典的关键数据,因此程序对字典的操作都是基于 key 的。基本操作如下:通过 key 访问 value 。通过 key 添加 key-value 对。通过 key 删除 key-value 对。通过 key 修改 key-value 对。通过 key 判断指定 key-value 对是否存在。通过 key 访问 value 使用的也是方括号语法,就像前面介绍的列表和元组一样,只是此时在方括号中放的是 key,而不是列表或元组中的索引。

2.特点

字典中所有元素都是一个key-value对,key不允许重复,value可以重复
字典中的元素是无序的      —— —— ——没有下标,取值通过方法获取
字典是可变的,字典中key必须是不可变对象       —— —— ——增删改查
字典也可以根据需要动态地伸缩
字典会浪费较大的内存,是一种 以空间换时间的数据结构

3.常用方法

clear()方法:clear() 用于清空字典中所有的 key-value 对,对一个字典执行 clear() 方法之后,该字典就会变成一个空字典
代码如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}print(cars) # {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 清空cars所有key-value对cars.clear()print(cars) # {}get()方法:get() 方法其实就是根据 key 来获取 value,它相当于方括号语法的增强版,当使用方括号语法访问并不存在的 key 时,字典会引发 KeyError 错误;但如果使用 get() 方法访问不存在的 key,该方法会简单地返回 None,不会导致错误
代码如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 获取'BMW'对应的valueprint(cars.get('BMW')) # 8.5print(cars.get('PORSCHE')) # Noneprint(cars['PORSCHE']) # KeyErrorupdate()方法:update() 方法可使用一个字典所包含的 key-value 对来更新己有的字典。在执行 update() 方法时,如果被更新的字典中己包含对应的 key-value 对,那么原 value 会被覆盖;如果被更新的字典中不包含对应的 key-value 对,则该 key-value 对被添加进去。
代码如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}cars.update({'BMW':4.5, 'PORSCHE': 9.3})print(cars)从上面的执行过程可以看出,由于被更新的 dict 中己包含 key 为“BMW”的 key-value 对,因此更新时该 key-value 对的 value 将被改写;但如果被更新的 dict 中不包含 key 为“PORSCHE”的 key-value 对,那么更新时就会为原字典增加一个 key-value 对。items()、keys()、values()方法:items()、keys()、values() 分别用于获取字典中的所有 key-value 对、所有 key、所有 value。这三个方法依次返回 dict_items、dict_keys 和 dict_values 对象,Python 不希望用户直接操作这几个方法,但可通过 list() 函数把它们转换成列表。
代码如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 获取字典所有的key-value对,返回一个dict_items对象ims = cars.items()print(type(ims)) # <class 'dict_items'># 将dict_items转换成列表print(list(ims)) # [('BMW', 8.5), ('BENS', 8.3), ('AUDI', 7.9)]# 访问第2个key-value对print(list(ims)[1]) # ('BENS', 8.3)# 获取字典所有的key,返回一个dict_keys对象kys = cars.keys()print(type(kys)) # <class 'dict_keys'># 将dict_keys转换成列表print(list(kys)) # ['BMW', 'BENS', 'AUDI']# 访问第2个keyprint(list(kys)[1]) # 'BENS'# 获取字典所有的value,返回一个dict_values对象vals = cars.values()# 将dict_values转换成列表print(type(vals)) # [8.5, 8.3, 7.9]# 访问第2个valueprint(list(vals)[1]) # 8.3从上面代码可以看出,程序调用字典的 items()、keys()、values() 方法之后,都需要调用 list() 函数将它们转换为列表,这样即可把这三个方法的返回值转换为列表。pop方法:pop() 方法用于获取指定 key 对应的 value,并删除这个 key-value 对。
代码如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}print(cars.pop('AUDI')) # 7.9print(cars) # {'BMW': 8.5, 'BENS': 8.3}popitem()方法:popitem() 方法用于随机弹出字典中的一个 key-value 对。此处的随机其实是假的,正如列表的 pop() 方法总是弹出列表中最后一个元素,实际上字典的 popitem() 其实也是弹出字典中最后一个 key-value 对。由于字典存储 key-value 对的顺序是不可知的,因此开发者感觉字典的 popitem() 方法是“随机”弹出的,但实际上字典的 popitem() 方法总是弹出底层存储的最后一个 key-value 对。
代码如下:cars = {'AUDI': 7.9, 'BENS': 8.3, 'BMW': 8.5}print(cars)# 弹出字典底层存储的最后一个key-value对,弹出也就是相当于删除了,再输出原字典时,最后一个key-vaule已经没有了print(cars.popitem()) # ('AUDI', 7.9)print(cars) # {'BMW': 8.5, 'BENS': 8.3}setdefault()方法:setdefault() 方法也用于根据 key 来获取对应 value 的值。但该方法有一个额外的功能,即当程序要获取的 key 在字典中不存在时,该方法会先为这个不存在的 key 设置一个默认的 value,然后再返回该 key 对应的 value。总之,setdefault() 方法总能返回指定 key 对应的 value;如果该 key-value 对存在,则直接返回该 key 对应的 value;如果该 key-value 对不存在,则先为该 key 设置默认的 value,然后再返回该 key 对应的 value。
代码如下:cars = {'BMW': 8.5, 'BENS': 8.3, 'AUDI': 7.9}# 设置默认值,该key在dict中不存在,新增key-value对print(cars.setdefault('PORSCHE', 9.2)) # 9.2print(cars)# 设置默认值,该key在dict中存在,不会修改dict内容print(cars.setdefault('BMW', 3.4)) # 8.5print(cars)fromkeys()方法:fromkeys() 方法使用给定的多个 key 创建字典,这些 key 对应的 value 默认都是 None;也可以额外传入一个参数作为默认的 value。该方法一般不会使用字典对象调用(没什么意义),通常会使用 dict 类直接调用。
代码如下:# 使用列表创建包含2个key的字典a_dict = dict.fromkeys(['a', 'b'])print(a_dict) # {'a': None, 'b': None}# 使用元组创建包含2个key的字典b_dict = dict.fromkeys((13, 17))print(b_dict) # {13: None, 17: None}# 使用元组创建包含2个key的字典,指定默认的valuec_dict = dict.fromkeys((13, 17), 'good')print(c_dict) # {13: 'good', 17: 'good'}使用字典格式化字符串在格式化字符串时,如果要格式化的字符串模板中包含多个变量,后面就需要按顺序给出多个变量,这种方式对于字符串模板中包含少量变量的情形是合适的,但如果字符串模板中包含大量变量,这种按顺序提供变量的方式则有些不合适。可改为在字符串模板中按 key 指定变量,然后通过字典为字符串模板中的 key 设置值。
代码如下:# 字符串模板中使用keytemp = '教程是:%(name)s, 价格是:%(price)010.2f, 出版社是:%(publish)s'book = {'name':'Python基础教程', 'price': 99, 'publish': 'C语言中文网'}# 使用字典为字符串模板中的key传入值print(temp % book)book = {'name':'C语言小白变怪兽', 'price':159, 'publish': 'C语言中文网'}# 使用字典为字符串模板中的key传入值print(temp % book)

三、解析

首先通过items()方法去获取所有的键值对,然后再把其赋值到一个新的字典中,这样就形成了对换;因为字典的存储是用的hash函数存储,存储是无序的;赋值的时候相当于给新的字典的key赋值value,但此时的值与原字典相反,因为将原key和value的位置进行了调换。

四、源码

def exchange(x):mydict_new = {}for key, val in mydict.items():#items获取所有的键值对,先取出来的为关键字,后取出来的为键值mydict_new[val] = key#赋值给新的字典,字典是内部用的是hash表存储,是无序的,查找时是通过key查找value所在的位置return mydict_newif __name__ == '__main__':mydict = {'张三':23,'李四':33,'王五':44}print(exchange(mydict))

交换字典的key和value相关推荐

  1. python字典相同key的值怎么分别取出_python字典值排序并取出前n个key值的方法

    python字典值排序并取出前n个key值的方法 今天在写一个算法的过程中,得到了一个类似下面的字典: {'user1':0.456,'user2':0.999,'user3':0.789,user: ...

  2. python字典怎么输出key_python如何调用字典的key

    python中调用字典中key的方法: 使用list()方法将字典中的keys转化为列表,然后通过列表索引值值即可调用指定的key. # -*- coding: utf-8 -*- # 定义一个字典 ...

  3. [python] 字典 pop(key)函数:删除字典中key及其值,并返回该值

    功能 删除字典给定键 key 及对应的值,返回值为被删除的值.key 不在字典中,则返回 default 值. 一般会在更新字典的时候用到. 语法 value_deleted = dict_name. ...

  4. python中key什么意思_Python中字典的key都可以是什么

    作者:Inotime 来源:CSDN 原文:https://blog.csdn.net/lnotime/article/details/81192207 答:一个对象能不能作为字典的key,就取决于其 ...

  5. Python 为什么list不能作为字典的key?

    Python 为什么list不能作为字典的key? Posted on 2017年1月12日 by laixintao 7 Comments 很多Python初学者经常会有这样的疑问,为什么Pytho ...

  6. dataframe的两列转换成字典的key和value

    dataframe的两列转换成字典的key和value 1.存为按插入顺序的字典OrderedDict csv文件内容: import pandas as pd import collections ...

  7. python遍历替换字典的key_Python遍历字典去key和value需要注意的点→enumerate和items()...

    嗯,首先在提到enumerate()这个枚举方法之前,我想到的就是这个可以遍历任何一个元素,可以打印出来key和value,但是我没有想到的是,这个遍历的,仅仅限于遍历打印出索引和元素. 碰到这个问题 ...

  8. Python字典的key都可以是什么

    一个对象能不能作为字典的key,就取决于其有没有__hash__方法.所以所有python自带类型中,除了list.dict.set和内部至少带有上述三种类型之一的tuple之外,其余的对象都能当ke ...

  9. 哪些可以作为字典的key

    python中的类型分可以分为两类,可变类型和不可变类型 可变类型:dict.list.set 不可变类型:int.long.float.complex.string.bool.tuple 其中可变类 ...

最新文章

  1. 我终于加上博士大佬的微信!攒了近百个技术问题,一口气解决!(文末有福利)...
  2. 【NLP】Attention Model(注意力模型)学习总结
  3. python整除表达 mod_[零基础学python]啰嗦的除法
  4. TLS调试检测和反调试
  5. eclipse打包成jar_Spring Boot 打包成的可执行 jar ,为什么不能被其他项目依赖?
  6. mysql 字符类型
  7. jquery-事件委托-delegate
  8. Tomcat Manager服务启用
  9. SQLite(二)高级操作
  10. 记录一次破解某加固APP的修改纪录
  11. 《复仇者联盟4:终局之战》剧情
  12. 顶层设计:为智慧城市描画建设“蓝图”
  13. 翻车率贼高的一个小题目
  14. 介绍 GBase 8c产品架构
  15. OMAP 3 图像信号处理器 (ISP) 驱动
  16. Javaweb核心响应对象
  17. ThreadPoolExecutor 线程池异常消失之刨根问底
  18. Windows程序crash该怎么分析?
  19. 2022-2028全球重要器官支持系统和医学仿生学行业调研及趋势分析报告
  20. linux分区命名规则,《linux就该这么学》第七节课:文件的各种权限以及linux分区命名规则...

热门文章

  1. 【Jmeter篇】1小时轻松搞定项目接口自动化测试与数据驱动
  2. Apache默认端口80被占用无法启动服务问题
  3. import win32com.client在python中报错及其解决办法
  4. ambari搭建注意事项
  5. BZOJ1500 [NOI2005]维修数列(Splay tree)
  6. 设计模式学习总结(一)——设计原则与UML统一建模语言
  7. python的递归算法学习(1)
  8. 织梦直接往数据库写入数据
  9. UIImagePickerController按钮的中文问题
  10. MVC.Net: jqueryval错误