1.创建空字典

  1. >>> dic = {}
  2. >>> type(dic)
  3. <type 'dict'>

2.直接赋值创建

  1. >>> dic = {'spam':1, 'egg':2, 'bar':3}
  2. >>> dic
  3. {'bar': 3, 'egg': 2, 'spam': 1}

3.通过关键字dict和关键字参数创建

  1. >>> dic = dict(spam = 1, egg = 2, bar =3)
  2. >>> dic
  3. {'bar': 3, 'egg': 2, 'spam': 1}

4.通过二元组列表创建

  1. list = [('spam', 1), ('egg', 2), ('bar', 3)]
  2. >>> dic = dict(list)
  3. >>> dic
  4. {'bar': 3, 'egg': 2, 'spam': 1}

5.dict和zip结合创建

  1. >>> dic = dict(zip('abc', [1, 2, 3]))
  2. >>> dic
  3. {'a': 1, 'c': 3, 'b': 2}

6.通过字典推导式创建

  1. >>> dic = {i:2*i for i in range(3)}
  2. >>> dic
  3. {0: 0, 1: 2, 2: 4}

7.通过dict.fromkeys()创建
通常用来初始化字典, 设置value的默认值

  1. >>> dic = dict.fromkeys(range(3), 'x')
  2. >>> dic
  3. {0: 'x', 1: 'x', 2: 'x'}

8.其他

  1. >>> list = ['x', 1, 'y', 2, 'z', 3]
  2. >>> dic = dict(zip(list[::2], list[1::2]))
  3. >>> dic
  4. {'y': 2, 'x': 1, 'z': 3}

排序字典

  1. names = ['Alice', 'Tom', 'Harry', 'Jerry', 'Mike']
  2. scores = [[8, 6, 7 ], [6, 7, 5], [8, 6, 9], [5, 7, 4], [8, 10, 9]]
  3. dic = {}
  4. len1 =len(names)
  5. for i in range(len1):
  6. dic[names[i]]=sum(scores[i])
  7. # dic1 = dict(zip(names, scores))
  8. print(dic)
  9. # print(dic1)
  10. dic = dict(sorted(dic.items(), key=lambda x: x[1], reverse=True))
  11. print(dic)

高阶函数

  1. # for
  2. l = []
  3. for i in range(0, 11, 2):
  4. l.append(i*i)
  5. print(l)
  6. # filter
  7. l1 = list(filter(lambda x: x%2==0 and pow(x, 1/2) in range(11), range(101)))
  8. print(l1)
  9. # map
  10. l2 = list(map(lambda x: x*x, range(0, 11, 2)))
  11. print(l2)
  12. # List derivation
  13. l3 = [i*i for i in range(0, 11, 2)]
  14. print(l3)
  15. # [0, 4, 16, 36, 64, 100]
  16. # [0, 4, 16, 36, 64, 100]
  17. # [0, 4, 16, 36, 64, 100]
  18. # [0, 4, 16, 36, 64, 100]

一个奇怪的现象(生成二位数组)

  1. m = n = 3
  2. test = [[0] * m] * n
  3. print("test =", test)
  4. 输出结果如下:
  5. test = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]

是不是看起来没有一点问题?
一开始我也是这么觉得的,以为是我其他地方用错了什么函数,结果这么一试:

  1. m = n = 3
  2. test = [[0] * m] * n
  3. print("test =", test)
  4. test[0][0] = 233
  5. print("test =", test)

输出结果如下:

  1. test = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
  2. test = [[233, 0, 0], [233, 0, 0], [233, 0, 0]]

也就是说matrix = [array] * 3操作中,只是创建3个指向array的引用,所以一旦array改变,matrix中3个list也会随之改变。

生成二维数组利用列表生成式

  1. from random import randint
  2. l = [[randint(0, 11) for i in range(5)] for j in range(5)]
  3. print(l)

更多相关文章

  1. 跨平台编译的经验之谈--cmake编译Android之ndk-build
  2. android 创建自定义模态框
  3. Handler机制分析
  4. PHP中Cookie与Session
  5. asp createTextFile生成文本文件支持utf8
  6. Android实战(四)------Myeclipse10搭建android运行环境图文详细
  7. Android(安卓)内容提供器---创建内容提供器(元素)
  8. Android动态替换Application实现
  9. Android中MediaMuxer跟MediaCodec用例

随机推荐

  1. android面试题总结
  2. Android开发-直播视讯(3)-创建一个Ubuntu
  3. findViewById()返回布局XML中自定义组件
  4. 基于Android6.0的RIL底层模块分析
  5. 在Webview上加载脱机更新页面
  6. 如何使用java RESTful Web服务将通知推送
  7. Java项目无法通过BufferedWriter向服务器
  8. Android无法加载第三方so的解决方法
  9. Android 打包VersionCode自增、APK文件名
  10. Android6.0的phone应用源码分析(5)——RIL