Python 字典 使用技巧

1.遍历字典的3种方式

Python3中:

1d = {'x': 1, 'y': 2, 'z': 3}

1.遍历keys:

1for k in d: 2 print(k) 3 print(d[key])

或者

1for k in d.keys(): 2 print(k) 3 print(d[key])

2.遍历values:

1for v in d.values(): 2 print(v)

3.遍历keys,values:

1for k,v in d.items(): 2 print(k) 3 print(v)

Python2中有所区别,items()keys()values()换成iteritems()iterkeys()itervalues()

2.字典推导式的使用

题目要求: 在这里插入图片描述 可以看出,键是从1到676,值是26个英文大写字母的组合。 我们首先要做的是找到字母组合的方法,首先想到的应该是利用chr()函数得到整型对应的字符,范围是65-90,进而可以用得到两个字符的组合,如下:

1lis = [chr(j) + chr(i) for j in range(65,91) for i in range(65,91)] 2print(lis)

打印:

1['AA', 2 'AB', 3 'AC', 4 'AD', 5 'AE', 6 'AF', 7 'AG', 8 'AH', 9 'AI', 10 'AJ', 11 'AK', 12 'AL', 13 'AM', 14 ... 15 'ZK', 16 'ZL', 17 'ZM', 18 'ZN', 19 'ZO', 20 'ZP', 21 'ZQ', 22 'ZR', 23 'ZS', 24 'ZT', 25 'ZU', 26 'ZV', 27 'ZW', 28 'ZX', 29 'ZY', 30 'ZZ']

现在再使用字典推导式和enumerate()函数即可得到所需结果,如下:

1result = {k + 1:s for k,s in enumerate([chr(j) + chr(i) for j in range(65,91) for i in range(65,91)])} 2print(reslut)

打印:

1{1: 'AA', 2 2: 'AB', 3 3: 'AC', 4 4: 'AD', 5 5: 'AE', 6 6: 'AF', 7 7: 'AG', 8 8: 'AH', 9 9: 'AI', 10 10: 'AJ', 11 11: 'AK', 12 12: 'AL', 13 13: 'AM', 14 14: 'AN', 15 15: 'AO', 16 16: 'AP', 17 17: 'AQ', 18 18: 'AR', 19 19: 'AS', 20 20: 'AT', 21 21: 'AU', 22 22: 'AV', 23 23: 'AW', 24 24: 'AX', 25 25: 'AY', 26 26: 'AZ', 27 27: 'BA', 28 28: 'BB', 29 29: 'BC', 30 30: 'BD', 31 31: 'BE', 32 32: 'BF', 33 33: 'BG', 34 34: 'BH', 35 35: 'BI', 36 36: 'BJ', 37 37: 'BK', 38 38: 'BL', 39 39: 'BM', 40 40: 'BN', 41 41: 'BO', 42 ... 43 662: 'ZL', 44 663: 'ZM', 45 664: 'ZN', 46 665: 'ZO', 47 666: 'ZP', 48 667: 'ZQ', 49 668: 'ZR', 50 669: 'ZS', 51 670: 'ZT', 52 671: 'ZU', 53 672: 'ZV', 54 673: 'ZW', 55 674: 'ZX', 56 675: 'ZY', 57 676: 'ZZ'}

除此之外,得到26个大写字母的方式还有其他方式,如使用string模块,用string.ascii_uppercase得到26个英文字母,再进行拼接,如下:

1import string 2{k + 1:s for k,s in enumerate([i + j for i in string.ascii_uppercase for j in string.ascii_uppercase])}

与前者效果是相同的。

3.对字典排序

对字典排序有2种情况:按照键排序和按照值排序,最简单易行的方式都是通过lambda表达式实现。 按照键排序示例如下:

1unsorted_dict = {'cl11': 2, 'cl101': 101, 'cl2': 3, 'cl1': 4, 'cl10': 1} 2sorted_dict = {k: v for k, v in sorted(unsorted_dict.items(), key=lambda x: x[0])} 3print(sorted_dict) 4

打印:

1{'cl1': 4, 'cl10': 1, 'cl101': 101, 'cl11': 2, 'cl2': 3} 2

显然,用到了字典推导式。

按照值排序示例如下:

1def sort_by_value(unsorted_dict): 2 sorted_items = sorted(unsorted_dict.items(), key=lambda x: x[1]) 3 sorted_dict = {k: v for k, v in sorted_items} 4 return sorted_dict 5 6 7unsorted_dict = {'cl11': 2, 'cl101': 101, 'cl2': 3, 'cl1': 4, 'cl10': 1} 8sorted_dict = sort_by_value(unsorted_dict) 9print(sorted_dict) 10

打印:

1{'cl10': 1, 'cl11': 2, 'cl2': 3, 'cl1': 4, 'cl101': 101} 2

显然,对字典根据值进行了排序; 并将实现部分抽离到函数中,优化了代码结构。

本文原文首发来自博客专栏Python实战,由本人转发至https://www.helloworld.net/p/8v7UpmS6wF8X,其他平台均属侵权,可点击https://blog.csdn.net/CUFEECR/article/details/104928665查看原文,也可点击https://blog.csdn.net/CUFEECR浏览更多优质原创内容。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Python3:sqlalchemy对mysql数据库操作,非sql语句

Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''