Python字典和集合

  1. 1. 字典字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、只含不可变类型元素的元组(1,2,3,’abc’)、实现__hash__()方法的自定义对象(因为__hash__()须返回一个整数,否则会出现异常:TypeError: an integer is required)。可以用hash(obj)检测对象是否是可哈希的。
  2. >>> class HashEnable(object):

  3. ...    def  __hash__(self):

  4. ...         return 1

  5. >>> he = HashEnable()

  6. >>> hash(he)

  7. 1

  8. >>> d = {he:1}

  9. >>> d = {[‘1‘,2]:2}

  10. Traceback (most recent call last):

  11. File "<stdin>", line 1, in <module> TypeError: unhashable type: ‘list‘
  12. 1.1 字典常用操作

  13. (1)创建字典
  14. >>> d1 = {}

  15. >>> d2 = {‘player‘:‘QVOD‘,‘game‘:‘kw‘}

  16. >>> d1,d2

  17. ({}, {‘player‘: ‘QVOD‘, ‘game‘: ‘kw‘})

  18. >>> d3 = dict(([‘name‘,‘alex‘],[‘sex‘,‘man‘]))

  19. >>> d3

  20. {‘name‘: ‘alex‘, ‘sex‘: ‘man‘}

  21. >>> d33 = d3.copy()

  22. >>> d33

  23. {‘name‘: ‘alex‘, ‘sex‘: ‘man‘}

  24. >>> d4 = {}.fromkeys((‘alex‘,‘zhou‘),1)

  25. >>> d4

  26. {‘alex‘: 1, ‘zhou‘: 1}

  27. >>> d5 = {}.fromkeys((‘alex‘,‘zhou‘))

  28. >>> d5

  29. {‘alex‘: None, ‘zhou‘: None}
  30. (2)遍历字典

  31. ps:访问一个不存在的key时,会发生KeyError异常,访问前可使用in或not in判断一下。
  32. >>> d = {‘name‘:‘alexzhou‘,‘sex‘:‘man‘}

  33. >>> for key in d:

  34. ...     print ‘%s,%s‘ %(key,d[key])

  35. ...

  36. name,alexzhou

  37. sex,man

  38. >>> d[‘name‘]

  39. ‘alexzhou‘

  40. >>> d2 = {‘name‘:‘alexzhou‘,‘age‘:100}

  41. >>> print ‘name: %s,age: %d‘ %(d2[‘name‘],d2[‘age‘])

  42. name: alexzhou,age: 100

  43. >>> d2[‘sex‘]

  44. Traceback (most recent call last):

  45. File "<stdin>", line 1, in <module> KeyError: ‘sex‘

  46. >>> ‘sex‘ in d2

  47. False

  48. >>> ‘name‘ in d2

  49. True
  50. (3)更新字典
  51. >>> d = {‘name‘:‘alexzhou‘,‘age‘:100}

  52. >>> d[‘age‘] = 88

  53. >>> d

  54. {‘age‘: 88, ‘name‘: ‘alexzhou‘}

  55. >>> d.pop(‘age‘)

  56. 88

  57. >>> d {‘name‘: ‘alexzhou‘}

  58. >>> d.clear()

  59. >>> d

  60. {}
  61. 1.2 常用内建函数

  62. (1)cmp()

  63. 字典的比较:首先是字典的大小,然后是键,最后是值
  64. >>> d1 = {‘abc‘:1,‘efg‘:2}

  65. >>> d2 = {‘abc‘:1,‘efg‘:2,‘h‘:3}

  66. >>> cmp(d1,d2)

  67. -1

  68. >>> d3 = {‘ab‘:1,‘efg‘:2}

  69. >>> cmp(d1,d3)

  70. 1

  71. >>> d4 = {‘abc‘:1,‘efg‘:3}

  72. >>> cmp(d1,d4)

  73. -1

  74. >>> d5 = {‘abc‘:1,‘efg‘:2}

  75. >>> cmp(d1,d5)

  76. 0
  77. (2)len()

  78. 返回键值对的数目
  79. >>> d = {‘abc‘:1,‘efg‘:2}

  80. >>> len(d)

  81. 2
  82. (3)keys()、values() 、items()

  83. keys()返回一个包含字典所有键的列表

  84. values()返回一个包含字典所有值的列表

  85. items()返回一个包含键值元组的列表
  86. >>> d = {‘name‘:‘alex‘,‘sex‘:‘man‘}

  87. >>> d.keys()

  88. [‘name‘, ‘sex‘]

  89. >>> d.values()

  90. [‘alex‘, ‘man‘]

  91. >>> d.items()

  92. [(‘name‘, ‘alex‘), (‘sex‘, ‘man‘)]
  93. (4)dict.get(key,default=None)

  94. 返回字典中key对应的value,若key不存在则返回default
  95. >>> d = {‘name‘:‘alex‘,‘sex‘:‘man‘}

  96. >>> d.get(‘name‘,‘not exists‘)

  97. ‘alex‘

  98. >>> d.get(‘alex‘,‘not exists‘)

  99. ‘not exists‘
  100. (5)dict.setdefault(key,default=None)

  101. 若key存在,则覆盖之前的值,若key不存在,则给字典添加key-value对
  102. >>> d.setdefault(‘name‘,‘zhou‘)

  103. ‘alex‘

  104. >>> d

  105. {‘name‘: ‘alex‘, ‘sex‘: ‘man‘}

  106. >>> d.setdefault(‘haha‘,‘xixi‘)

  107. ‘xixi‘

  108. >>> d

  109. {‘haha‘: ‘xixi‘, ‘name‘: ‘alex‘, ‘sex‘: ‘man‘}
  110. (6)dict.update(dict2)

  111. 将字典dict2的键值对添加到dict
  112. >>> d = {‘name‘:‘alex‘,‘sex‘:‘man‘}

  113. >>> d1 = {‘age‘:100,‘address‘:‘shenzhen‘}

  114. >>> d.update(d1)

  115. >>> d

  116. {‘age‘: 100, ‘address‘: ‘shenzhen‘, ‘name‘: ‘alex‘, ‘sex‘: ‘man‘
  117. (7)sorted(dict)

  118. 返回一个有序的包含字典所有key的列表
  119. >>> sorted(d)

  120. [‘address‘, ‘age‘, ‘name‘, ‘sex‘]
  121. 2. 集合set

  122. python中集合对象(set)是一组无序排列的可哈希的值,包含两种类型:可变集合(set)和不可变集合(frozenset),所以set不是可哈希的,frozenset是可哈希的,能当作字典的键。
  123. >>> s = set(‘a‘)

  124. >>> hash(s) Traceback (most recent call last):

  125. File "<stdin>", line 1, in <module>

  126. TypeError: unhashable type: ‘set‘

  127. >>> fs = frozenset(‘a‘)

  128. >>> hash(fs)

  129. -1305064881317614714
  130. 2.1 集合常用操作(1)创建集合
  131. >>> s = set(‘alexzhou‘)

  132. >>> s

  133. set([‘a‘, ‘e‘, ‘h‘, ‘l‘, ‘o‘, ‘u‘, ‘x‘, ‘z‘])

  134. >>> fs = frozenset(‘alexzhou‘)

  135. >>> fs

  136. frozenset([‘a‘, ‘e‘, ‘h‘, ‘l‘, ‘o‘, ‘u‘, ‘x‘, ‘z‘])
  137. (2)遍历集合
  138. >>> for e in s:

  139. ...     print e

  140. ...

  141. a

  142. e

  143. h

  144. l

  145. o

  146. u

  147. x

  148. z
  149. (3)更新集合(add/update/remove/discard/pop/clear(-=))

  150. s.add(obj):添加对象obj

  151. s.update(s1): 用s1中的成员修改s,s现在包含s1的成员

  152. s.remove(obj):从集合s中删除obj,若obj不存在,则引发KeyError错误

  153. s.discard(obj): 如果obj是s的成员,则删除obj

  154. s.pop(): 删除集合s中任意一个对象,并返回

  155. s.clear(): 删除集合s中所有元素
  156. >>> s = set(‘alexzhou‘)

  157. >>> s.update(‘hai‘)

  158. >>> s

  159. set([‘a‘, ‘e‘, ‘i‘, ‘h‘, ‘l‘, ‘o‘, ‘u‘, ‘x‘, ‘z‘])

  160. >>> s.add(‘hai‘)

  161. >>> s

  162. set([‘a‘, ‘hai‘, ‘e‘, ‘i‘, ‘h‘, ‘l‘, ‘o‘, ‘u‘, ‘x‘, ‘z‘])

  163. >>> s.remove(‘hai‘)

  164. >>> s

  165. set([‘a‘, ‘e‘, ‘i‘, ‘h‘, ‘l‘, ‘o‘, ‘u‘, ‘x‘, ‘z‘])

  166. >>> s -= set(‘alex‘)

  167. >>> s

  168. set([‘i‘, ‘h‘, ‘o‘, ‘u‘, ‘z‘])

  169. >>> s.pop()

  170. ‘i‘

  171. >>> s

  172. set([‘h‘, ‘z‘, ‘u‘, ‘o‘])

  173. >>> s.discard(‘h‘)

  174. >>> s

  175. set([‘z‘, ‘u‘, ‘o‘])

  176. >>> s.clear()

  177. >>> s

  178. set([])

  179. >>> fs = frozenset(‘alexzhou‘)

  180. >>> fs.add(‘z‘)

  181. Traceback (most recent call last):

  182. File "<stdin>", line 1, in <module>

  183. AttributeError: ‘frozenset‘ object has no attribute ‘add‘
  184. (4) 集合比较

  185. s1.issubset(s2):检测s1是否是s2的子集,是则返回True,否则返回False

  186. s1.issuperset(s2):检测s1是否是s2的超集,是则返回True,否则返回False
  187. >>> s = set(‘alexzhou‘)

  188. >>> fs = frozenset(‘alexzhou‘)

  189. >>> s == fs

  190. True

  191. >>> s2 = set(‘alexzhou‘)

  192. >>> s == s2

  193. True>>> s3 = set(‘alexzhouj‘)

  194. >>> s > s3

  195. False

  196. >>> s < s3

  197. True

  198. >>> s
  199. (5)联合union操作(s1|s2,s1.union(s2))

  200. 产生的集合的每个元素至少是其中一个集合的成员。如果左右两边的集合类型相同,则产生的结果是相同的,若不同,则产生的结果跟左操作数相同。
  201. >>> s1 = set(‘abc‘)

  202. >>> fs = frozenset(‘de‘)
  203. >>> s1 | fs

  204. set([‘a‘, ‘c‘, ‘b‘, ‘e‘, ‘d‘])

  205. >>> type(s1 | fs)

  206. <type ‘set‘>

  207. >>> type(fs | s1)

  208. <type ‘frozenset‘>

  209. >>> s2 = set(‘fg‘)

  210. >>> type(s1 | s2)

  211. <type ‘set‘>

  212. >>> s1.union(fs)

  213. set([‘a‘, ‘c‘, ‘b‘, ‘e‘, ‘d‘])

  214. >>> type(s1.union(fs))

  215. <TYPE ?set?>

  216. >>> type(fs.union(s1))

  217. <TYPE ?frozenset?>
  218. (6)交集s1&s2,补集s1-s2,异或s1^s2

  219. 交集:新集合中的元素同时是s1和s2的元素 –> s1.intersection(s2)

  220. 补集:新集合中的元素只属于s1,不属于 –> s1.difference(s2)

  221. 异或:新集合中的元素不能同时属于s1和s2 –> s1.symmetric_difference(s2)
  222. >>> fs = frozenset(‘de‘)

  223. >>> s = set(‘def‘)

  224. >>> s & fs

  225. set([‘e‘, ‘d‘])

  226. >>> s - fs

  227. set([‘f‘])

  228. >>> fs - s

  229. frozenset([])

  230. >>> s ^ fs

  231. set([‘f‘])

  232. >>> s.intersection(fs)

  233. set([‘e‘, ‘d‘])

  234. >>> s.difference(fs)

  235. set([‘f‘])

  236. >>> s.symmetric_difference(fs)

  237. set([‘f‘])

Python字典和集合,布布扣,bubuko.com

时间: 2024-11-16 18:13:29

Python字典和集合的相关文章

Python字典、集合结构详解

目录 字典 导言 什么是字典 字典的主要特征 访问字典的值 创建空字典并添加键--值对 修改字典中的值 删除键--值对 遍历字典 遍历所有键--值对 遍历字典中的键 遍历字典中的值 通过映射函数创建字典 集合 导言 什么是集合 set()函数 计算集合元素个数 集合添加.删除元素 添加元素 删除元素 删除.清空集合 删除整个集合 清空集合 集合的交集.并集和差集运算 运算符进行运算 函数实现 参考资料: 例题讲解 四则运算(用字典实现 题目分析 代码实现 列表去重 题目分析: 代码实现 通过两个

Python字典、集合

字典是一种可变容器模型,且可存储任意类型对象 特点: 字典是无序的,它不能通过偏移来存取,只能通过键来存取. 内部没有顺序,通过键来读取内容,可嵌套,合并,方便我们组织多种数据结构,并且可以原地修改里面的内容,属于可变类型. 组成字典的键必须是不可变的数据类型,比如,数字,字符串,元组等,列表等可变对象不能作为键 1.字典的定义 a = {'1':'a','2':'b','3':'c'}huoa = dict(1='a',2='b',3='c') 2.插入内容 a[4] = 'd'结果为:{'1

python字典和集合(数组)

字典 info = { 'a': 123, 'b': "xxx" } # 取值两张方法 第一种不存在报错 # print(info["x"]) print(info.get('x')) # 删除 del info['a'] # 判断key是否存在 print('a' in info) 集合/元组 import copy # 引入copy库 # 集合(数组) names = ['aaa', 'bbb', 'ccc', 'ddd', [1, 2, 3, 4]] # 插入

Python序列结构--集合

集合:元素之间不允许重复 集合属于Python无序可变序列,元素之间不允许重复 集合对象的创建与删除 直接将值赋值给变量即可创建一个集合 >>> a = {3,5}>>> type(a)<class 'set'> set()函数将列表.元组.字符串.range对象等其他可迭代对象转换为集合,如果原来的数据中存在重复元素,则转换为集合的时候只保留一个:如果原序列或迭代对象中有不可哈希的值,无法转换为集合,抛出异常 >>> a_set=set(

2.python基础之—列表,元组,字典,集合,字符串的使用方法

一.关于python序列的简介. python里面的序列大部分都可以执行,索引,切片,加,乘,检查长度,以及检查某个成员是否存在,甚至还可以找出这个序列中最小的元素和最大的元素,并且序列都是可迭代的. 解释下个人理解的迭代,迭代(iteration),序列中的迭代就是对序列中的每个元素重复执行某些操作/ 具体的迭代方式后面会说到. 下面就说说python序列的共有特点. 1.索引 一个序列中,所有的元素都有自己的编号,这个编号是从0开始的,这个编号就是所谓的索引,这些元素可以通过索引来依次访问.

python基础知识——基本的数据类型2——列表,元组,字典,集合

磨人的小妖精们啊!终于可以归置下自己的大脑啦,在这里我要把--整型,长整型,浮点型,字符串,列表,元组,字典,集合,这几个知识点特别多的东西,统一的捯饬捯饬,不然一直脑袋里面乱乱的. 一.列表 1.列表的全部方法 如:['1','2'].['wupeiqi', 'alex'] 1 >>> dir(list) 2 ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '_

python 学习笔记day05-python字典和集合、条件和循环、文件和输入输出

字典和集合 字典基础操作 创建字典 通过{}操作符创建字典 通过dict()工厂函数创建字典 通过fromkeys()创建具有相同值的默认字典 >>> aDict = {'Name':'Bob','age':23}                >>> import tab                >>> bDict = dict((['name','bob'],['age',23]))                >>> p

Python 之字典与集合

进入python的字典与集合的学习. 先回顾下集合. 在python中,集合用set表示.花括号与set()可以用来创建集合. 还是先创建一个空的集合 不能用s={}来创建一个集合,创建一个空的集合使用set(). 集合是无序的,不重复的,所以在创建集合的时候重复的元素会被去掉. 集合的基本运算: 交    & 并    | 差    - 对称差 ^ 举个例子: 设集合s1={1,2,3,4},集合s2={2,3,5} 则: >>> s1={1,2,3,4} >>&g

第七节:python列表、元组、字典、集合

python个人笔记,纯属方便查询: ################################## ################################## ################################## i=['car','clothes','ipone']      #语法 i         #查看所有的元素 i[0]     #取第一个 i[1]     #取第二个 i[-1]    #取最后一个  i[0:10]   #取一个到第九个  i[-