Python基础学习之字典操作

文章目录

  • Python基础学习之字典操作
    • 1. 字典的创建
      • 1.1 直接赋值法
      • 1.2 关键字赋值法
      • 1.3 列表转化法
      • 1.4 元素增加法
      • 1.5 元组转化法
      • 1.6 创建key值法
    • 2. 字典的增、删、改、查
      • 2.1 字典的增加,常用的方法有:update, 元素增加
      • 2.2 字典的删除,常用的方法有:pop, del,clear,popitem
      • 2.3 字典的修改,常用的方法有:update, 元素修改
      • 2.4 字典的查询,常用的方法有:直接读取,get,利用循环查询键;
    • 3. 字典的循环
      • 3.1 仅对key 或者 value 进行循环:
      • 3.2 对key, value 进行循环:
      • 3.3 对字典里的值进行排序
    • 4. 总结:字典的内置方法 & 内置函数
      • 4.1 内置方法
      • 4.2 内置函数
    • 5. collections.defaultdict

1. 字典的创建

创建字典有非常多种方式,但是我认为只要先掌握以下3种,就可以应对大部分的应用场景了;

1.1 直接赋值法

按照字典要求的格式,直接赋值,便可以轻松的得到一个字典;举例如下:

dic={'塞尔达':'林克','分手厨房':'小鳄鱼','马里奥制造':'路易吉'}
print(dic)   # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}

1.2 关键字赋值法

使用字典的关键字 dict 进行创建,这种方法虽然简单,但也经常用到,举例如下:

dic = dict(A=1, B=2, C=3)
print(dic)    # 输出:{'A': 1, 'B': 2, 'C': 3}

这里需要注意的是:虽然都是字符串,但是作为Key的字符串并不需要使用引号,value的字符串必须使用引号; 备注:字典类型非常灵活,什么类型的变量都可以包容~

dic = dict(塞尔达='林克', 分手厨房='小鳄鱼', 马里奥制造='路易吉')
print(dic)  # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}

1.3 列表转化法

有两个列表 (a 和 b),他们之间存在着对应关系,我们现在需要把他们结合起来,变成一个字典。这时我们可以使用 dict & zip 结合的方法,举例如下:

a = ['塞尔达', '分手厨房', '马里奥制造']
b = ['林克', '小鳄鱼', '路易吉']
dic = dict(zip(a, b))
print(dic)   # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}

这种方法在日常中经常用到,需要熟练掌握哟~~

1.4 元素增加法

这种方法的精髓就是,先建立一个空的字典,然后给它增加元素;举例如下:

dic={}
dic['塞尔达']='林克'
dic['分手厨房'] ='小鳄鱼'
print(dic)

这里涉及到空字典的创建,常用的创建空字典方法有两种(其实就是前面讲过的方法一 & 二)为:dic={} or dic=dict()

1.5 元组转化法

元组转化法的格式是: dict (((k, v), (k, v))),比想象中要多一个括号,需要注意;举例如下:
感觉这种方法用的不多(也可能是我用的比较少),先了解一下吧,有用的时候再来这里看;

dic = dict((('塞尔达','林克'),('分手厨房','小鳄鱼') , ('马里奥制造','路易吉')))
print(dic)   # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}

1.6 创建key值法

这种方法常用在我知道字典的Key值,但是不确定其value的时候,我觉得也不常用,先了解一下吧;

keys = ['塞尔达', '分手厨房', '马里奥制造']
values=''dic1= dict.fromkeys(keys,values)   # 我们给它赋值Values,赋值什么,所有的value就都是什么;
print(dic1)   # 输出: {'塞尔达': '', '分手厨房': '', '马里奥制造': ''}   因为我们赋值了空字符串,所以值全部为''dic2 = dict.fromkeys(keys,)    # 我们不赋值values,这是会默认其值为None;
print(dic2)  # 输出: {'塞尔达': None, '分手厨房': None, '马里奥制造': None}

2. 字典的增、删、改、查

2.1 字典的增加,常用的方法有:update, 元素增加

  1. update() 方法
    使用update()方法,比较灵活,可以单个增加,也可以批量增加;
  • 单个增加:
dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
dic.update( 王者荣耀 ='妲己')    # 单个增加,使用 = 的方式
print(dic)   # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉', '王者荣耀': '妲己'}dic.update({'英雄联盟':'卡牌大师'})    # 单个增加,使用字典 {} 的方式
print(dic)
  • 批量增加;
dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
dic.update( 王者荣耀 ='妲己', 英雄联盟 ='卡牌大师')   # 多个增加
print(dic)  # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉', '王者荣耀': '妲己', '英雄联盟': '卡牌大师'}dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
dic.update({'英雄联盟':'卡牌大师','王者荣耀':'妲己'})
print(dic)  # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉', '英雄联盟': '卡牌大师', '王者荣耀': '妲己'}
  1. 元素增加法
    与字典创建中的元素增加法一样,举例如下:
dic={}
dic['塞尔达']='林克'
dic['分手厨房'] ='小鳄鱼'
  1. 设置默认值 setdefault()
    使用 setdefault() 方法可以设置字典中的默认值;
dic = {'name':'zhangkai','age':18}
dic.setdefault('gender','男')   # 字典中没有该值,则设置默认值;
print(dic)   # 输出:{'name': 'zhangkai', 'age': 18, 'gender': '男'}
dic.setdefault('gender','女')   # 字典中已经有了值,则默认值不再生效
print(dic)   # 输出:{'name': 'zhangkai', 'age': 18, 'gender': '男'}

2.2 字典的删除,常用的方法有:pop, del,clear,popitem

  1. pop(key) 推荐使用pop方法,返回值为被删除的value,举例如下:
    注意:这里必须使用key,因为字典类型是无序的,所以字典类型没有index;这里的pop必须传入参数,若dic.pop(),则会报错,如下例子所示;
dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
a = dic.pop('马里奥制造')
print(dic)  # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼'}
print(a)   # 输出:路易吉
dic.pop()   # 报错:error:TypeError: pop expected at least 1 arguments, got 0
  1. del 推荐只在删除变量时使用;删除字典中键值对时,不推荐使用;
dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
del dic['分手厨房']
print(dic)    # 输出:{'塞尔达': '林克', '马里奥制造': '路易吉'}del dic    # 不指定key时,会将字典dic 删除
print(dic)  # 由于字典已经被删除,所以此处报错,NameError: name 'dic' is not defined
  1. clear() 使用该方法,会清空字典中所有的键值对,字典变量还在,只是变成了空字典;使用del 方法删除时,字典变量会被删除;
dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
dic.clear()
print(dic)    # 输出:{}  空字典
  1. popitem()
    删除字典中的最后一个键值对,但是由于字典是无序的,所以会随机删除一个键值对;
dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
a = dic.popitem()    # 随机删除一个键值对,并返回被删除的键值对(元组类型);
print(dic)   # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼'}
print(a)   # 输出:('马里奥制造', '路易吉')

2.3 字典的修改,常用的方法有:update, 元素修改

  1. update() 当Key存在时,将修改key对应的value; 即:若key 不存在,则新增加;若key存在,则重新赋值;举例如下:
dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
dic.update( 马里奥制造 ='马里奥')
print(dic)     # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '马里奥'}dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
dic.update({'马里奥制造':'马里奥'})
print(dic)   # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '马里奥'}dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
dic.update( 分手厨房 ='小鸭子', 马里奥制造 ='马里奥')
print(dic)    # 输出:{'塞尔达': '林克', '分手厨房': '小鸭子', '马里奥制造': '马里奥'}dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
dic.update({'分手厨房':'小鸭子','马里奥制造':'马里奥'})
print(dic)    # 输出:{'塞尔达': '林克', '分手厨房': '小鸭子', '马里奥制造': '马里奥'}
  1. 元素修改
dic={'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
dic['塞尔达']='塞尔达公主'
print(dic)    # 输出:{'塞尔达': '塞尔达公主', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}

2.4 字典的查询,常用的方法有:直接读取,get,利用循环查询键;

  1. 直接读取,通过键,可以直接读取值;
dic={'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
value = dic['塞尔达']
print(value)   # 输出:林克
  1. get() , 该方法也是通过键,读取字典对应键值对的值;
dic={'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
value = dic.get('塞尔达')
print(value)  # 输出:林克

不同点是:直接读取时,若键不存在,则会报错;使用get() 时,不会报错,会返回None; 举例如下:

dic={'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
value = dic.get('鲁迅')
print(value)    # 输出:None
value=dic['鲁迅']   # 报错,报错内容:KeyError: '鲁迅'
  1. 利用循环,查询键值;
dic={'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
a ="林克"
for key,value in dic.items():  # items()读取所有的键值,i 是键 ,j 是值if value == a :print(key)    # 输出:塞尔达

3. 字典的循环

3.1 仅对key 或者 value 进行循环:

# 对key进行循环:
dic={'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
for key in dic:print('字典的键值为:',key)print('字典的值为:', dic[key])
# 输出为:
# 字典的键值为: 塞尔达
# 字典的值为: 林克
# 字典的键值为: 分手厨房
# 字典的值为: 小鳄鱼
# 字典的键值为: 马里奥制造
# 字典的值为: 路易吉# 对value进行循环:
dic={'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
for value in dic.value:print('字典的值为:', value)
# 输出为:
# 字典的值为: 林克
# 字典的值为: 小鳄鱼
# 字典的值为: 路易吉

3.2 对key, value 进行循环:

dic={'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}
for key,value in dic.items():print('字典的键值为:',key)print('字典的值为:', value)
# 输出为:
# 字典的键值为: 塞尔达
# 字典的值为: 林克
# 字典的键值为: 分手厨房
# 字典的值为: 小鳄鱼
# 字典的键值为: 马里奥制造
# 字典的值为: 路易吉

3.3 对字典里的值进行排序

说明:字典类型元素本身没有顺序,也就是循环时输出的先后是不确定的;如果对顺序有要求的话,可以在循环前先去除Key进行排序,然后取出对应的value值;举例如下:

# 对字典中的元素进行排序
dic={'2': '林克', '3': '小鳄鱼', '1': '路易吉'}
print('排序前:',end='  ')
for key,value in dic.items():print(key,value,end='  ')   # end=' '输出结束后不换行,而是两个空格;这项默认为\n(换行符)# 输出:排序前:  2 林克  3 小鳄鱼  1 路易吉 NO=[]
for key in dic:NO.append(key)NO.sort()
print('\n排序后:',end='  ')
for no in NO:print(no,dic[no],end='  ')   # 输出:排序后:  1 路易吉  2 林克  3 小鳄鱼 

4. 总结:字典的内置方法 & 内置函数

4.1 内置方法

dic={}
dic.fromkeys()    # 创建一个新字典;见前文:1.6 创建key值法
dic.update(dict2)    # 把字典dict2的键/值对更新到dict里;参考:2.1 字典的增加
dic.setdefault(key, default=None)    # 和get()类似, 但如果键不已经存在于字典中,将会添加键并将值设为default的值,如果键存在,则键值不改变;参考:2.1.3 设置默认值 setdefault()
dic.clear()    # 删除字典内所有元素;见前文:2.2 字典的删除;
dic.get(key, default=None)    # 返回指定键的值,如果值不在字典中返回default值;见前文:2.4 字典的查询
dic.keys()    # 以列表返回一个字典所有的键;参考:3.1 字典循环
dic.values()    # 以列表返回字典中的所有值;参考:3.1 字典循环
dic.items()    # 以列表返回可遍历的(键, 值) 元组数组,元组可以像前文一样,直接用两个变量拆分;参考:3.2 字典循环
dic.copy()    # 返回一个字典的浅复制,字典的复制与列表的复制类似,参考《Python基础学习之列表操作》;
dic.has_key(key)    # 判断字典dict里是否有key, 有则返回true,否则返回false,比较简单,前文无介绍;

备注:1. 字典的复制与列表的复制类似,可以参考《Python基础学习之列表操作》
2. 这里的dic, 都代表字典;

4.2 内置函数

dic={}
len(dic)              # 计算字典元素个数,即:dic中键的总数。
str(dic)              # 将字典转化为字符串。
type(dic)             # 返回输入的变量类型,如果变量是字典就返回字典类型。

5. collections.defaultdict

collections.defaultdict(list) 其中 list标识统计后的值的类型,例如以下例子中,list为结果红框中的类型


import collections
s = [("yyyyyyy",1),("xxxxxxxx",2),("aaaaaaa",3),("bbbbbbb",4),("bbbbbbb",5),("bbbbbbb","adas")]d = collections.defaultdict(list)for k,v in s:print(k)print(v)d[k].append(v)print(list(d.items()))print(d)

运行结果如下:

Python基础学习之字典操作相关推荐

  1. Python基础学习之列表操作

    Python基础学习之列表操作 文章目录 Python基础学习之列表操作 1. 列表的增,删,改,查 1.1 列表的增加,常用的方法有:append, extent, incert 1.2 列表的删除 ...

  2. Python基础学习之字典(自用)—henu.hjy

    通过学习菜鸟教程总结的一些易错及值得注意的地方,此处提前表明代码来源!!! 字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型.列表是有序的对象集合,字典是无序的对象集合 ...

  3. Python基础学习之字典(Dictionary)

    文章目录 1.什么是Python字典 2.创建Python字典 3.查询Python字典中的值 4.增加Python字典关键字与值 5.更新Python字典中的值 6.删除Python字典元素 7.P ...

  4. Python 基础学习 4 ——字典

    字典由大括号和键值对组成,特点为无序,键唯一 1.字典的创建 1 #直接创建字典 2 dic1={'name':a,'age':18} 3 #通过dict创建字典,输出都为{'name': 'a', ...

  5. 【Python基础学习】基本数据结构:列表、元组、栈、字典、集合与队列

    [Python基础学习]基本数据结构:列表.元组.栈.字典.集合与队列 Python的基本数据结构中,包含了列表.元组等一系列数组式数据结构,但各个结构各有不同.因此单独列出来,分析相同与不同 列表( ...

  6. python开发需要掌握哪些知识-Python基础学习需要掌握哪些知识

    1.1Python的对象 python的内置对象类型有很多,包括数字,字符串,列表,集合,元组,字典等等,在Python中,一切皆对象 pickle腌制--在Python中,如果有一些对象需要持久性存 ...

  7. Python基础学习笔记之(一)

    Python基础学习笔记之(一) zouxy09@qq.com http://blog.csdn.net/zouxy09 前段时间参加微软的windows Azure云计算的一个小培训,其中Pytho ...

  8. Python基础学习备忘录上

    Python基础学习 备忘录上 Python语法 1.1 输出 1.1.1 输出换行的更改 1.1.2 输出整型 1.1.3 输出字符串 1.1.4 字符串拼接与多行输出 1.1.5 输入输出类型转换 ...

  9. python | 基础学习(一)了解Bug、pycharm、变量、程序的三大流程(顺序、if、while)、运算符、快捷键

    文章目录 一.引言 1.python的起源 2.解释器 3.python的设计目标 4.python的特点 二.python 1.了解BUG 2.python的三种运行方式 ①解释器python/py ...

最新文章

  1. 比较高明的暗部提亮方法:选取暗部,滤色叠加
  2. 全球及中国本质安全校准器行业销售前景与竞争规模预测报告2022-2027年
  3. 如果去掉数学前后的空格_理综+数学+地理+英语完型的方法和技巧
  4. 7 兼容 因特尔十代_年终抄底十代酷睿 请务必看看它……- ——快科技(驱动之家旗下媒体)-...
  5. loadRunner12试用
  6. ionic 添加地图定位功能
  7. 第 8 章 配置listener监听器
  8. 为什么JavaScript需要模块化开发?
  9. oracle 判断数值为小数位数为一位且为0_Python的循环、判断和各种表达式(长文系列第二篇)...
  10. 服务器powershell占用百分百,使用PowerShell统计服务器C盘空间
  11. 《精通Matlab数字图像处理与识别》一第6章 频率域图像增强
  12. win7藏文打印部分文字乱码问题处理
  13. Delta并联机构重力补偿分析
  14. wps页眉怎么设置不同页码_WPS论文排版教程二:如何设置不同页码
  15. 为什么要选择平台+独立站运营的双轨模式
  16. 金融行业认同的七本书
  17. c语言幂函数_了解C / C ++中的幂函数
  18. 手把手教你接入支付宝支付
  19. 使用LODOP设计打印模板
  20. ardupilot 关于设备车Rover的学习《2》------如何解锁

热门文章

  1. 安卓.odex文件的反编译
  2. 偏微分方程 python_有关一个偏微分方程组的求解?
  3. Vector CAN Log报文收发分析工具VN1640/VN1630替代款工具--CANBOX
  4. 微信小程序 实现点击按钮选择图片后显示图片并且可以预览该图片
  5. Springboot 一文搞懂AOP面向切面编程
  6. 几何光学学习笔记(11)- 3.5 理想光学系统的物像关系特性曲线 3.6光学系统的组合
  7. java求学生的总分和平均分_c语言中求课程总分、平均分。学生总分及平均分
  8. CADe_SIMu V1.0.0.1手把手学习笔记(6)
  9. 渐进算法分析(简称算法分析)详解
  10. 帆软认证报表工程师(FCRA)考试