#!/usr/bin/python # 字典 # 当时学java的时候, 语言基础就学了好久, 然后是各种API, 最后才是集合 # 键值对, 可变 # 1. 映射操作 D = {'food' : 'Spam', 'quantity':4, 'color':'pink'} print(D['food']) # 通过键来获取值 D['quantity'] += 1 # 改变键对应的值 # 另一种构造字典的方法 D = {} D['name'] = 'Bob' D['job'] = 'dev' D['age'] = 40 # 在Python通过字典编写的搜索方法很快 # 重访嵌套 rec = {'name': {'first':'Bob', 'last':'Smith'}, 'job':['dev', 'mgr'], 'age':40.5} rec['name'] rec['name']['last'] rec['job'] rec['job'][-1] # 'job'键对应的列表的最后一个值 rec['job'].append('janitor') # 所建立的这些对象都不需要手动释放, 有Python的自动垃圾收集 # 2. 键的排序: for循环 # 字典仅支持通过键获取元素, 而且有时候还是无需的 # 如锅要对字典进行排序, 先获取键的列表, 然后使用sort方法进行排序 # 最后使用for循环逐个显示结果 Ks = list(D.keys()) # 无需列表 Ks.sort() # 对key进行排序 for key in Ks: print(key, '=>', D[key]) for c in 'spam': print(c.upper()) x = 4 while x > 0: print('spam!' * x) x -= 1 # 迭代和优化 squares = [ x ** 2 for x in [1, 2, 3, 4, 5]] print(squares) squares = [] for x in [1, 2, 3, 4, 5]: squares.append(x ** 2) # 列表解析和相关的函数编程工具, 如map和filter, 通常运行得比for循环快 # 首先为了简单和可读性去编写代码, 在程序可以工作, 并证实确实有必要考虑性能之后, 再考虑该问题 # 关于这个python提供了time以及timeit和profile模块 # 不存在的键: if 测试 D = { 'a' : 1, 'c' : 3, 'b' : 2} D['e'] = 99 # D['f'] 键'f'不存在, 这样使用会报错的 # in关系表达式允许我们查询字典中一个键是否存在 if not 'f' in D: print('missing key f in D') value = D.get('x', 0) # 获取键'x'的值, 如果没有获取到那么就是0付给value D[None] = 4 # None也可以作为键耶 print(D)