1.遍历字典的3种方式
Python3中:
d = {'x': 1, 'y': 2, 'z': 3}
1.遍历keys:
for k in d: print(k) print(d[key])
或者
for k in d.keys(): print(k) print(d[key])
2.遍历values:
for v in d.values(): print(v)
3.遍历keys,values:
for k,v in d.items(): print(k) print(v)
Python2中有所区别,items()
、keys()
、values()
换成iteritems()
、iterkeys()
、itervalues()
。
2.字典推导式的使用
题目要求:
可以看出,键是从1到676,值是26个英文大写字母的组合。
我们首先要做的是找到字母组合的方法,首先想到的应该是利用chr()
函数得到整型对应的字符,范围是65-90,进而可以用得到两个字符的组合,如下:
lis = [chr(j) + chr(i) for j in range(65,91) for i in range(65,91)] print(lis)
打印:
['AA', 'AB', 'AC', 'AD', 'AE', 'AF', 'AG', 'AH', 'AI', 'AJ', 'AK', 'AL', 'AM', ... 'ZK', 'ZL', 'ZM', 'ZN', 'ZO', 'ZP', 'ZQ', 'ZR', 'ZS', 'ZT', 'ZU', 'ZV', 'ZW', 'ZX', 'ZY', 'ZZ']
现在再使用字典推导式和enumerate()
函数即可得到所需结果,如下:
result = {k + 1:s for k,s in enumerate([chr(j) + chr(i) for j in range(65,91) for i in range(65,91)])} print(reslut)
打印:
{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: 'AN', 15: 'AO', 16: 'AP', 17: 'AQ', 18: 'AR', 19: 'AS', 20: 'AT', 21: 'AU', 22: 'AV', 23: 'AW', 24: 'AX', 25: 'AY', 26: 'AZ', 27: 'BA', 28: 'BB', 29: 'BC', 30: 'BD', 31: 'BE', 32: 'BF', 33: 'BG', 34: 'BH', 35: 'BI', 36: 'BJ', 37: 'BK', 38: 'BL', 39: 'BM', 40: 'BN', 41: 'BO', ... 662: 'ZL', 663: 'ZM', 664: 'ZN', 665: 'ZO', 666: 'ZP', 667: 'ZQ', 668: 'ZR', 669: 'ZS', 670: 'ZT', 671: 'ZU', 672: 'ZV', 673: 'ZW', 674: 'ZX', 675: 'ZY', 676: 'ZZ'}
除此之外,得到26个大写字母的方式还有其他方式,如使用string模块,用string.ascii_uppercase
得到26个英文字母,再进行拼接,如下:
import string {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表达式实现。
按照键排序示例如下:
unsorted_dict = {'cl11': 2, 'cl101': 101, 'cl2': 3, 'cl1': 4, 'cl10': 1} sorted_dict = {k: v for k, v in sorted(unsorted_dict.items(), key=lambda x: x[0])} print(sorted_dict)
打印:
{'cl1': 4, 'cl10': 1, 'cl101': 101, 'cl11': 2, 'cl2': 3}
显然,用到了字典推导式。
按照值排序示例如下:
def sort_by_value(unsorted_dict): sorted_items = sorted(unsorted_dict.items(), key=lambda x: x[1]) sorted_dict = {k: v for k, v in sorted_items} return sorted_dict unsorted_dict = {'cl11': 2, 'cl101': 101, 'cl2': 3, 'cl1': 4, 'cl10': 1} sorted_dict = sort_by_value(unsorted_dict) print(sorted_dict)
打印:
{'cl10': 1, 'cl11': 2, 'cl2': 3, 'cl1': 4, 'cl101': 101}
显然,对字典根据值进行了排序;
并将实现部分抽离到函数中,优化了代码结构。