python 系列(3) 字典详解以及集合入门

Posted on Posted in python

## 字典

- 字典是 python 唯一的映射类型
- key:value
- key:只能使用不可变的对象(比如字符串)来作为字典的键,值随意
- 键值在字典中一这样的方式标记:d = {key1:value1, key2:value2}
- 字典中的键/值对是没有顺序的
- 字典是 dict 类的实例/对象

#### 字典的创建访问

- 直接通过花括号来创建,可以创建空字典
- 字典可以索引,只不过索引值是键值
- 利用内置函数 dict 创建字典

  1. D1 = {'a':1, 'b':2}  
  2. D2 = dict(( ('a',1),('b',2) ))  
  3. d3 = dict(a='abc')  
  4.   
  5. d2 = {'a':1}  
  6. d2['b'] = 'bb'  
  7. d2  
  8. {'a': 1, 'b': 'bb'}  
  9.   
  10. d2.keys() #取出所有的键  
  11. d2.values() #取出所有的值  
  12.   
  13. 字典的内置方法  
  14. d4 = dict(([1,'a'],[2,'b']))  
  15. d4  
  16. {1: 'a', 2: 'b'}  

#### 字典操作函数

1. fromkeys

> 创建字典

> 语法:dict.fromkeys(seq[, value])),seq中元素做字典的键,value为字典所有键对应的初始值。

  1. d5 = dict.fromkeys((1,2,30),'a')  
  2. d5  
  3. {1: 'a', 2: 'a', 30: 'a'}  

2. keys() values() items()

3. get()

> get 到字典中不存在的键值,不会出现错误

  1. d4  
  2. {1: 'a', 2: 'b'}  
  3. d4.get(1)  
  4. 'a'  

4. clear()

> 清除所有

  1. d4  
  2. {1: 'a', 2: 'b'}  
  3. d4.clear()  

5. copy()

> 浅拷贝
copy 内存值会变
深浅拷贝,以后说

6. pop() popitem()

- pop 删除

- popitem() 随机删除

  1. In [53]: a = {1:'a',2:'b',3:'c'}  
  2.   
  3. In [54]: a  
  4. Out[54]: {1: 'a', 2: 'b', 3: 'c'}  
  5.   
  6. In [55]: a.pop(2)  
  7. Out[55]: 'b'  
  8.   
  9. In [56]: a  
  10. Out[56]: {1: 'a', 3: 'c'}  

7. setdefault()

> 添加键值对。添加后的顺序是随机的

  1. a  
  2. {2: 'b', 3: 'c'}  
  3. a.setdefault(4)  
  4. a  
  5. {2: 'b', 3: 'c', 4: None}  
  6. a.setdefault(5,'z')  
  7. 'z'  
  8. a  
  9. {2: 'b', 3: 'c', 4: None, 5: 'z'}  

8. update

> 用字典更新字典

  1. {2: 'b', 3: 'c', 4: None, 5: 'z'}  
  2. b = {'a':'ba'}  
  3. a.update(b)  
  4. a  
  5. {2: 'b', 3: 'c', 4: None, 5: 'z', 'a': 'ba'}  

## set 集合

> 可以用{}和 set()函数创建集合。创建一个空集合必须用 set(),不能用{},不然就是字典了

- 数据元素唯一
- 无序
- 可变

  1. In [72]: set1 = {1,121,43,54}  
  2.   
  3. In [73]: set1  
  4. Out[73]: {1, 43, 54, 121} #直接排序了  
  5.   
  6. In [81]: a = set('123456')  
  7.   
  8. In [82]: b = set('9876')  
  9.   
  10. In [83]: a-b #差集  
  11. Out[83]: {'1', '2', '3', '4', '5'}  
  12.   
  13. In [84]: a|b #并集  
  14. Out[84]: {'1', '2', '3', '4', '5', '6', '7', '8', '9'}  
  15.   
  16. In [85]: a&b #交集  
  17. Out[85]: {'6'}  
  18.   
  19. In [86]: a^b #不同时出现的元素  
  20. Out[86]: {'1', '2', '3', '4', '5', '7', '8', '9'}  

#### set(不可变)

  1. In [96]: myset1 = frozenset([1,2,3]) #创建一个不可变的集合  
  2.   
  3. In [97]: myset1  
  4. Out[97]: frozenset({1, 2, 3})  

#### 内置工厂函数

  1. In [102]: a = [1,2,4]  
  2.   
  3. In [103]: b = set(a)  
  4.   
  5. In [104]: b  
  6. Out[104]: {1, 2, 4}  

#### 更新集合

  1. In [105]: a  
  2. Out[105]: [1, 2, 4]  
  3.   
  4. In [106]: c = set('abcdefg')  
  5.   
  6. In [107]: c.add(10)  
  7.   
  8. In [108]: c  
  9. Out[108]: {10, 'a', 'b', 'c', 'd', 'e', 'f', 'g'}  
  10.   
  11. In [109]: c.update(a)  
  12.   
  13. In [110]: c  
  14. Out[110]: {1, 2, 4, 10, 'a', 'b', 'c', 'd', 'e', 'f', 'g'}  

#### 读取集合

> 迭代

  1. [ i for i in set ]  

> 删除

- clear #全删除

- pop #随机删

  1. In [119]: c  
  2. Out[119]: {2, 4, 10, 'b', 'd', 'e', 'f', 'g'}  
  3.   
  4. In [120]: c.pop()  
  5. Out[120]: 'b'  
  6.   
  7. remove #删除指定值  
  8.   
  9. In [124]: c  
  10. Out[124]: {2, 4, 10, 'd', 'e', 'f', 'g'}  
  11.   
  12. In [125]: c.remove(2)  
  13.   
  14. discard  
  15.   
  16. In [128]: c  
  17. Out[128]: {10, 'd', 'e', 'f', 'g'}  
  18.   
  19. In [129]: c.discard(4)  
  20.   
  21. In [130]: c.remove(4)  
  22. ---------------------------------------------------------------------------  
  23. KeyError                                  Traceback (most recent call last)  
  24. <ipython-input-130-d6b55590dfa8> in <module>()  
  25. ----> 1 c.remove(4)  
  26.   
  27. KeyError: 4  

Leave a Reply

Your email address will not be published. Required fields are marked *

eight + 15 =