dict字典
dictionary = {key : value,…}
key 和 value 可重复
创建和搜索字典键值
1.创建
# 创建单键映射单值dict
dict1 = dict(Alibaba ='Taobao', Baidu ='BaiduMap', Tengxun ='QQ') #dict格式:{'key':content,...}
# 创建单键映射多值dict
from collections import defaultdict
dict2 = defaultdict(list) #创建元素是list的dict
dict2['language'].append('C++') # 为单键添加多映射
dict2['language'].append('python')
print(dict2)
>> defaultdict(<class 'list'>, {'language': ['C++', 'python']})
- 注意:用dict(keyname = value )创建dict时,keyname不能加引号
2.搜索
print('T' in dict2) #查找'T'是否在dict2
print(dict2.keys(),' ',dict2.values(),' ',dict2.items())
# 返回dict2所有key, dict2所有value, dict2所有(key,value)
print(dict1.get('W','no key'))
#dict.get(key,'没找到key时返回的语句')---有key返回value, 没有返回None和'xxx'
比较和运算
dict2 = {'Alibaba':1999,'Baid':2000,'Tengxun':1998,'Wangyi':1997,'Jingdong':1998}
dict1.keys() & dict2.keys() # 返回keys交集
>> Out[19]: {'Alibaba', 'Tengxun'}
dict1.keys() - dict2.keys() # 返回keys差集
## 同理.items(), 不能用于.values()
>> Out[20]: {'Baidu'}
# 代数运算默认作用于key
print(min(dict2))
>> Alibaba
min(dict2, key=lambda k : dict2[k]) # 返回最小value对应的key
>> Out[24]: 'Wangyi'
# 当多个实体拥有相同的值的时候,拥有最小或最大键的实体会返回
- ** 注意:代数运算默认作用于key
排序
rows = [
{'fname': 'Brian', 'lname': 'Jones', 'uid': 1003},
{'fname': 'David', 'lname': 'Beazley', 'uid': 1002},
{'fname': 'John', 'lname': 'Cleese', 'uid': 1001},
{'fname': 'Big', 'lname': 'Jones', 'uid': 1004}
]
from operator import itemgetter # 用itemgetter模块
# 单键或多键排序
rows_by_fname = sorted(rows, key=itemgetter('fname'))
# 以fname为准,排序rows
print(rows_by_fname)
rows_by_name = sorted(rows, key=itemgetter('lname','fname'))
# 以fname & lname 为准,排序rows
print(rows_by_name) # 原理???
max(rows, key=itemgetter('uid')) # 返回uid最大对应的key
set集合
集合中不存才重复元素,理论上集合大小不可变,但可以用
创建
set = set()
用help(set)查看你函数功能
s1 = set([1,2,3]) #s1,s2 是变量,它的值可以通过赋值更改;但set()是不变量,不能通过赋值改变元素值或者个数
s2 = set([2,3,4])
print(s1,s2)
>> {1, 2, 3} {2, 3, 4, 6}
s1.add(4) #set()只能有一个元素,不能改变元素,可用list伪增删改
print(s1) # {1, 2, 3, 4}
print(s1 & s2) # 取交集
>> {2, 3, 4}
print(s1 | s2) # 取并集
>> {1, 2, 3, 4, 6}
参考文献:
python3cookbook:
https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html