Python 字典
1. 字典的介绍
2. 字典的常用操作
3. 遍历字典元素
1. 字典的常用操作
字典的作用:既能存储多个数据,又能很方便地定位到需要访问的元素。
1 >>> di = {"one": 1, 2: "two"} 2 >>> di["one"] 3 1 4 >>> di[2] 5 'two' 6 >>>
- 字典的每个元素由两部分组成:键和值。
- 在列表中查找元素是根据索引;在字典中查找元素是根据键。
- 若查找了不存在的键,会返回异常。若想避免异常,可使用get()方法。
- 只有不可变类型的数据才能作为键。
2. 字典的常用操作
创建
1 >>> # 方式一 2 >>> di = {"one": 1, 2: "two"} 3 4 >>> # 方式二:使用dict()函数 5 >>> dict() # 创建空字典 6 {} 7 >>> dict({1:2, "a":3}) # 传入字典 8 {1: 2, 'a': 3} 9 >>> dict([(1,2), [3,4]]) # 传入多维列表/元组 10 {1: 2, 3: 4} 11 >>> dict(one=1, two=2) # 传入关键字 12 {'one': 1, 'two': 2} 13 >>> dict(zip(["one","two"], [1, 2])) # 使用zip函数 14 {'one': 1, 'two': 2}
增
方法1:如果在使用“变量名[键] = 值”时,这个键在字典中不存在,那么就会新增这个元素。
方法2:update(d1, d2):将字典d2的元素添加到字典d1中
1 >>> a = {1: 2, 2: 3} 2 >>> b = {3: 4} 3 >>> a.update(b) 4 >>> a 5 {1: 2, 2: 3, 3: 4}
方法3:setdefault(key, value):当key不存在时,添加value。
>>> d = {1: "hello"} >>> d.setdefault(2, "x") # 只有在key(即2)不存在的情况下才生效 'x' >>> d {1: 'hello', 2: 'x'} >>> d.setdefault(2,"xxxxx") # 当key存在时,该方法无效 'x' >>> d {1: 'hello', 2: 'x'}
方法4:dict.fromkeys(seq, value):将序列seq的每个元素作为键,value参数作为每个value值,并返回字典对象。
1 >>> seq = ("name", "age", "sex") 2 >>> di = dict.fromkeys(seq, 10) 3 >>> di 4 {'name': 10, 'age': 10, 'sex': 10}
方法5:字符映射
1 >>> di = str.maketrans("123", "abc") 2 >>> di 3 {49: 97, 50: 98, 51: 99} 4 >>> s = "12345321" 5 >>> s.translate(di) # 1对应a,2对应b,3对应c 6 'abc45cba'
删
- del:可以删除字典的某个元素,或整个字典。
- clear():清空整个字典。
- popitem():随机删除并返回该键值对,当字典为空时执行该方法会返回异常。
- pop(key):根据key值删除该键值对,并返回value值,当key不存在时返回异常。
1 {'one': 1, 2: 'two'} 2 >>> del di[2] # 删除某个元素 3 >>> di 4 {'one': 1} 5 >>> del di # 删除整个字典 6 >>> di 7 Traceback (most recent call last): 8 File "<stdin>", line 1, in <module> 9 NameError: name 'di' is not defined 10 >>> di = {"one": 1, 2: "two"} 11 >>> di.clear() # 清空整个字典的元素 12 >>> di 13 {} 14 >>> a 15 {1: 2, 2: 3, 3: 4} 16 17 >>> a.popitem() # 随机删除并返回某一键值对 18 (3, 4) 19 >>> a.pop(1) # 根据key删除该键值对,并返回value 20 2 21 >>> a.pop(1) # key不存在 22 Traceback (most recent call last): 23 File "<stdin>", line 1, in <module> 24 KeyError: 1
改
如果在使用“变量名[键] = 值”时,这个键在字典中存在,那么就会更改该键的值。
查
- get():当不确定字典是否存在某个键而又想获取其值时,为了避免报错,可以使用get()方法。若指定元素不存在则默认返回None,还可以设置返回的默认值。
- keys():返回一个包含该字典所有的key的列表。
- values():返回一个包含该字典所有的value的列表。
- items():返回一个包含该字典所有的(key, value)元组的列表。
- has_key(key):如果参数key存在字典的键中,则返回True,反之返回False。(该方法在python3中已被移除,可用in代替)
1 >>> di = dict(one=1, two=2) 2 >>> di.get("three") # 若不存在则返回None 3 4 >>> di.get("three", 3) # 设置返回的默认值为3 5 3 6 >>> di.keys() 7 dict_keys(['one', 'two']) 8 >>> di.values() 9 dict_values([1, 2]) 10 >>> di.items() 11 dict_items([('one', 1), ('two', 2)])
3. 遍历字典元素
使用for循环
1 >>> di = dict(one=1, two=2) 2 >>> for key in di.keys(): 3 ... print(key) 4 ... 5 one 6 two 7 >>> for value in di.values(): 8 ... print(value) 9 ... 10 1 11 2 12 >>> for key, value in di.items(): 13 ... print(key, value) 14 ... 15 one 1 16 two 2
练习题
实现获取键盘输入的简单计算器
方法一:if 条件语句实现
1 while 1: 2 num1 = float(input("请输入被乘数:")) 3 oper = input("请输入四则运算符:") 4 num2 = float(input("请输入乘数:")) 5 if oper == "+": 6 print(num1 + num2) 7 elif oper == "-": 8 print(num1 - num2) 9 elif oper == "*": 10 print(num1 * num2) 11 elif oper == "/": 12 print(num1 / num2) 13 else: 14 print("输入的运算符有误,仅能为'+ - * /'之一")
方法二:用字典代替switch功能
1 while 1: 2 num1 = float(input("请输入被乘数:")) 3 oper = input("请输入四则运算符:") 4 num2 = float(input("请输入乘数:")) 5 di = { 6 "+": num1 + num2, 7 "-": num1 - num2, 8 "*": num1 * num2, 9 "/": num1 / num2, 10 } 11 print(di.get(oper, "输入有误"))