python实现有序遍历dict(字典)
作者:yealxxy
python有序遍历dict(字典)
大家都知道dict是无序的,这篇文章介绍dict的有序遍历。这里我们主要用到一个python的方法sorted()。
一、sorted()方法介绍
内建函数sorted方法,可以对所有可迭代的对象进行排序操作。
1.方法-sorted(iterable, key=None, reverse=False):
iterable
,可以看到其中第一个参数是可迭代对象;key
,主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序;reverse
,是否反转,默认情况下不反转;
2.sorted()的理解,对list的排序为例:
def test_sorted(): L = [('b', 2), ('a', 1), ('c', 3), ('d', 0)] print(sorted(L,key=lambda x:x[0])) # 用第一项排序 print(sorted(L,key=lambda x:x[1])) # 用第二项排序 test_sorted() 输出: [('a', 1), ('b', 2), ('c', 3), ('d', 0)] [('d', 0), ('a', 1), ('b', 2), ('c', 3)]
二、dict按key有序遍历
def sort_by_key(dic): for key in sorted(dic): print(key,dic[key]) dic = {1:2,4:2,6:1,0:5} sort_by_key(dic) 输出: 0 5 1 2 4 2 6 1
三、dict按value有序遍历
def sort_by_value(dic): for key,value in sorted(dic.items(),key=lambda x:x[1]): print(key,value) dic = {1:2,4:2,6:1,0:5} sort_by_value(dic) 输出: 6 1 1 2 4 2 0 5
python的dict用法
一、dict
python中的dict(字典)就是来保存这种映射,在dict中每一个key和value 是一一对应的。
【E1】新来同学Gaven成绩86,编写一个dict,把新同学成绩添加进去。
d = { 'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49 } d ['Gaven'] =86 print(d) #{'Alice': 45, 'Candy': 75, 'David': 86, 'Ellena': 49, 'Gaven': 86, 'Bob': 60}
二、读取dict 元素
创建一个dict ,dict 通过key找到对应的value的功能。还可以通过key来获取对应的value,dict提供get方法,把key当作参数传递给get方法。当Key不存在时也不会出错。
【E2】根据如下dict,打印出Alice, Bob, Candy, Mimi, David的成绩,当同学不存在时,打印None。
d ={ 'Alice':45, 'Bob':60, 'Candy':75, 'David':86, 'Ellena':49, 'Gaven':86 } print(d['Alice']) print(d['Bob']) print(d['Candy']) print(d['David']) print(d['Ellena']) print(d['Gaven']) print(d.get('Dodo'))
三、添加dict元素
dict和tuple不一样,dict是可变的,我们随时可以往dict中添加新的key-value,value可以是任意类型的元素,可以是list、tuple等,
【E3】Alice、Bob、Candy的最近三次的成绩分别是[50, 61, 66],[80, 61, 66],[88, 75, 90],请更新dict,使得dict可以保存同学多次的成绩。
d = { 'Alice': [45], 'Bob': [60], 'Candy': [75], } d['Alice'] =[50,61,66] d['Bob'] =[80,61,66] d['Candy'] =[88,75,90] print(d) #{'Bob': [80, 61, 66], 'Alice': [50, 61, 66], 'Candy': [88, 75, 90]}
赋值语句有两个功能:
- 1.当key不存在时,往dict中添加对应的key:value元素。
- 2.当key存在时,会更新dict,用新的value 替换原来的value。
在使用赋值语句往dict中添加元素时,为了避免不必要的覆盖问题,我们需要先判断key是否存在,然后再做更新。
【E4】请更新Alice的成绩为60,并把旧的成绩记录下来。
d = { 'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49 } d['Alice'] =60 print(d)
四、删除dict元素
当我们不需要这个元素时,需要把元素从dict中删除,pop()方法快速删除元素。但需要指定需要删除元素的key,并返回value。
<**注>**pop()方法的参数是dict中的key,当key不存在时,同样会引起错误。
d = { 'Alice': 45, 'Bob': 60, 'Candy': 75, 'David': 86, 'Ellena': 49 } print(d) alice_score =d.pop('Alice') print(alice_score) print(d) bob_score =d.pop('Bob') print(bob_score) print(d)
五、dict的特点查找速度快
查找速度快
dict的第一个特点是查找速度快,而list的查找速度随着元素增加而逐渐下降。dict的缺点是占用内存大,还会浪费很多内容,list正好相反,占用内存小,但是查找速度慢。
有序与无序
在python3.5之前,dict元素插入顺序是无序的。python3.5之后元素有序。
python遍历dict
遍历dict有两种方法
- 第一种是遍历dict的所有key,并通过key获得对应的value。
- 第二种方法是通过dict提供的items()方法,items()方法会返回dict中所有的元素,每个元素包含key和value。
【E5】以此输出同学的每次成绩。
d = {‘Alice’: [50, 61, 66], ‘Bob’: [80, 61, 66], ‘Candy’: [88, 75, 90]}
d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]} for key,value in d.items(): if value > 60: print(key,value) ==> #('Bob', [80, 61, 66]) #('Alice', [50, 61, 66]) #('Candy', [88, 75, 90])
六、清除所有元素
dict 提供clear()函数,直接清除dict 中所有元素。
d = {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]} print(d) # ==> {'Alice': [50, 61, 66], 'Bob': [80, 61, 66], 'Candy': [88, 75, 90]} d.clear() print(d) #====》[]
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。