字典Dictionary
字典是一种可变容器模型,且可存储任意类型对象。每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中 ,格式如下所示:
d = {key1 : value1, key2 : value2 }
键必须是唯一的,但值则不必。
- 创建:d = {key1 : value1, key2 : value2 }
- 访问:dict[‘Age’],当不存在会报错:KeyError: ‘Age’
- 修改:dict[‘Age’] = 8 # 修改信息
- 删除
- pop(key[,default]) <根据key来删除>
- popitem() <随机删除>
- dict.clear() # 清空字典
- del dict[‘Name’] # 删除键 ‘Name’
循环遍历
-
遍历字典的key
for key in dict: print(key) for key in dict.keys(): print(key)
-
遍历字典的value
# 字典中的key之后就可以直接通过索引来得到相对应的value for key in dict.keys(): print(dict[key]) # 通过dict.values()来直接遍历索引 for key in dict.keys(): print(key)
-
遍历字典的项
# 通过dict.item()返回的元组数列可以遍历整个结果,每个数据项是一个元组。 for item in dict.items(): print(item) # 对items进行key和value的遍历。 for key, value in dict.items(): print(key, value)
字典排序
对生成的字典的结果按照key或者value进行排序,主要用到的方法就是python的内置函数sorted()。sorted()函数的作用是对所有可迭代的对象进行排序操作的函数。
sorted(iterable, cmp=None, key=None, reverse=False)
"""
iterable:是可迭代的数据类型。
cmp:是用于比较的函数,将key指定的关键字通过该函数规定的比较规则进行比较。有点类似java中的Comparable抽象类中的compareTo()方法。传递两个参数,例如f(a,b),指定a和b的逻辑比较规则,结果返回正数、负数或者零来分别表示大于、小于和等于。
key:用于进行比较的数据。
reverse:排序规则,默认是True降序,或者设置为False来升序。
"""
-
按照key值进行排序
- 当iterable传入的dict时,dict返回的是对key迭代,所以得到的排序结果也是对key排序后的列表。
sorted_dict = sorted(dict, key=lambda x:x[0]) print(sorted_dict) # ['LiSi', 'WangWu', 'ZhangSan', 'ZhaoLiu']
- 如果传入的是dict.items(),此时传入的是元组,所以排序后返回的结果也是元组的列表。
sorted_dict = sorted(dict.items(), key=lambda x:x[0]) print(sorted_dict) # [('LiSi', 10), ('WangWu', 5), ('ZhangSan', 2), ('ZhaoLiu', 4)]
- 当iterable传入的dict时,dict返回的是对key迭代,所以得到的排序结果也是对key排序后的列表。
-
按照value值进行排序
按照value排序时,只需把key迭代对象选择为x[1]就可以了。sorted_dict = sorted(dict.items(), key=lambda x:x[1], reverse=True) print(sorted_dict) # [('LiSi', 10), ('WangWu', 5), ('ZhaoLiu', 4), ('ZhangSan', 2)] """ lambda匿名函数的作用类似: def f(x): return x[1] """
字典API
- Python字典包含了以下内置函数
序号 | 函数 | 描述 |
---|---|---|
1 | len(dict) | 计算字典元素个数,即键的总数。 |
2 | str(dict) | 输出字典,以可打印的字符串表示。 |
3 | type(variable) | 返回输入的变量类型,如果变量是字典就返回字典类型。 |
- Python字典包含了以下内置方法
序号 | 函数 | 描述 |
---|---|---|
1 | popitem() | 随机返回并删除字典中的一对键和值(一般删除末尾对)。 |
2 | pop(key[,default]) | 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。 |
3 | radiansdict.clear() | 删除字典内所有元素 |
4 | radiansdict.copy() | 返回一个字典的浅复制 |
5 | radiansdict.fromkeys() | 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
6 | radiansdict.get(key, default=None) | 返回指定键的值,如果值不在字典中返回default值 |
7 | key in dict | 如果键在字典dict里返回true,否则返回false |
8 | radiansdict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
9 | radiansdict.keys() | 返回一个迭代器,可以使用 list() 来转换为列表 |
10 | radiansdict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
11 | radiansdict.update(dict2) | 把字典dict2的键/值对更新到dict里 |
12 | radiansdict.values() | 返回一个迭代器,可以使用 list() 来转换为列表 |
集合set
集合(set)是一个无序的不重复元素序列。(可以用作去重)
-
创建:
一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。parame = {value01,value02,...} 或者 set(value # 去重 basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'} print(basket) # 这里演示的是去重功能 # {'orange', 'banana', 'pear', 'apple'}
-
添加:
s.add( x ),如果x存在则不做操作。
s.update( x ),参数可以是列表,元组,字典等。tmpset = set('123') tmp = ['aa', 'bb'] # tmpset.add(listtmp) # 报错TypeError: unhashable type: 'list' tmpset.update(tmp) # 不报错,添加列表时,所有item均添加 print(tmpset) # 每次输出结果均不一致 tmp = ('cc', 'dd') tmpset.update(tmp) # 添加元组时,所有item均添加 print(tmpset) # 每次输出结果均不一致 tmp = {4: 'ee', 5: 'ff'} tmpset.update(tmp) # 添加元组时,所有键值添加、item不添加 print(tmpset) # 每次输出结果均不一致 """ {'3', 'aa', '2', 'bb', '1'} {'3', 'aa', 'cc', '2', 'bb', '1', 'dd'} {'3', 'aa', 'cc', 4, 5, '2', 'bb', '1', 'dd'} """
-
移除:
s.remove( x ),将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误。
s.discard( x ),移除集合中的元素,且如果元素不存在,不会发生错误。
s.pop() ,随机删除集合中的一个元素。在交互模式下,pop 是删除集合的第一个元素(排序后的集合的第一个元素)。>>>thisset = set(("Google", "Runoob", "Taobao", "Facebook")) >>> thisset.pop() 'Facebook' >>> print(thisset) {'Google', 'Taobao', 'Runoob'}
s.clear(),清空集合。
-
集合的运算
- 交差并
>>> a = set('abracadabra') >>> b = set('alacazam') >>> a {'a', 'r', 'b', 'c', 'd'} >>> a - b # 集合a中包含而集合b中不包含的元素 {'r', 'd', 'b'} >>> a | b # 集合a或b中包含的所有元素 {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'} >>> a & b # 集合a和b中都包含了的元素 {'a', 'c'} >>> a ^ b # 不同时包含于a和b的元素 {'r', 'd', 'b', 'm', 'z', 'l'}
- 列表推导
>>>a = {x for x in 'abracadabra' if x not in 'abc'} >>> a {'r', 'd'}
-
查询
x in s
内置方法
集合内置方法完整列表
序号 | 方法 | 描述 |
---|---|---|
1 | add() | 为集合添加元素 |
2 | update() | 为集合添加元素,不报错,可以添加列表、元组、字典等 |
3 | clear() | 移除集合中的所有元素 |
4 | copy() | 拷贝一个集合 |
5 | pop() | 随机移除元素 |
6 | remove() | 移除指定元素 |
7 | difference() | 返回多个集合的差集 |
8 | difference_update() | 移除集合中的元素,该元素在指定的集合也存在。 |
9 | discard() | 删除集合中指定的元素 |
10 | intersection() | 返回集合的交集 |
11 | intersection_update() | 删除集合中的元素,该元素在指定的集合中不存在。 |
12 | isdisjoint() | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
13 | issubset() | 判断指定集合是否为该方法参数集合的子集。 |
14 | issuperset() | 判断该方法的参数集合是否为指定集合的子集 |
15 | symmetric_difference() | 返回两个集合中不重复的元素集合。 |
16 | symmetric_difference_update() | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中。 |
17 | union() | 返回两个集合的并集 |
个人博客:Loak 正 - 关注人工智能及互联网的个人博客
文章地址:Python基础(三)—字典和集合