当前位置 : 主页 > 编程语言 > python >

【Python基础学习】第三节 字典操作

来源:互联网 收集:自由互联 发布时间:2022-10-26
Python基础学习之字典操作 1. 字典的创建 创建字典有非常多种方式,但是我认为只要先掌握以下3种,就可以应对大部分的应用场景了; 1.1 直接赋值法 按照字典要求的格式,直接赋值,

Python基础学习之字典操作

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, 元素增加

  • update() 方法 使用update()方法,比较灵活,可以单个增加,也可以批量增加;
    • 单个增加:
    dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'} dic.update( 王者荣耀 ='妲己') # 单个增加,使用 = 的方式 print(dic) # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉', '王者荣耀': '妲己'} dic.update({'英雄联盟':'卡牌大师'}) # 单个增加,使用字典 {} 的方式 print(dic)
    • 批量增加;
    dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'} dic.update( 王者荣耀 ='妲己', 英雄联盟 ='卡牌大师') # 多个增加 print(dic) # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉', '王者荣耀': '妲己', '英雄联盟': '卡牌大师'} dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'} dic.update({'英雄联盟':'卡牌大师','王者荣耀':'妲己'}) print(dic) # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉', '英雄联盟': '卡牌大师', '王者荣耀': '妲己'}
  • 元素增加法 与字典创建中的元素增加法一样,举例如下:
  • dic={} dic['塞尔达']='林克' dic['分手厨房'] ='小鳄鱼'
  • 设置默认值 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

  • 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
  • del 推荐只在删除变量时使用;删除字典中键值对时,不推荐使用;
  • dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'} del dic['分手厨房'] print(dic) # 输出:{'塞尔达': '林克', '马里奥制造': '路易吉'} del dic # 不指定key时,会将字典dic 删除 print(dic) # 由于字典已经被删除,所以此处报错,NameError: name 'dic' is not defined
  • clear() 使用该方法,会清空字典中所有的键值对,字典变量还在,只是变成了空字典;使用del 方法删除时,字典变量会被删除;
  • dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'} dic.clear() print(dic) # 输出:{} 空字典
  • popitem() 删除字典中的最后一个键值对,但是由于字典是无序的,所以会随机删除一个键值对;
  • dic = {'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'} a = dic.popitem() # 随机删除一个键值对,并返回被删除的键值对(元组类型); print(dic) # 输出:{'塞尔达': '林克', '分手厨房': '小鳄鱼'} print(a) # 输出:('马里奥制造', '路易吉')

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

  • 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) # 输出:{'塞尔达': '林克', '分手厨房': '小鸭子', '马里奥制造': '马里奥'}
  • 元素修改
  • dic={'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'} dic['塞尔达']='塞尔达公主' print(dic) # 输出:{'塞尔达': '塞尔达公主', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'}

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

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

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

    dic={'塞尔达': '林克', '分手厨房': '小鳄鱼', '马里奥制造': '路易吉'} value = dic.get('鲁迅') print(value) # 输出:None value=dic['鲁迅'] # 报错,报错内容:KeyError: '鲁迅'
  • 利用循环,查询键值;
  • 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基础学习】第四节 数据类型操作
    下一篇:没有了
    网友评论