Python高级数据类型-字典
- 1.字典的定义
- 2.字典的基本操作:查询,增加,修改,获取
- 3.字典的统计、合并、清空
- 4.字典的循环遍历
- 5.返回最大“值”对应的“键”
- 6.应用场景
- pop(key)
- 7.集合
字典是除了列表之外最灵活的数据类型,用来描述一个物体的关键信息,比如描述一个人的特征,身高,体重,年龄,
1.字典的定义
字典: 用于存储无序的数据类型,不关心数据保存的顺序,用键来访问保存的数据
列表: 用于存储 有序 的数据类型,用索引访问—有序
定义方式1–用{}+Key:value定义,键值对之间用逗号分隔。
#一个键值对占据一行,看起来比较清晰
xiaoming={"name": " xiaoming","age": 18,"gender": True,"height": 1.75,"weight": 65}
print(xiaoming)
定义方式1–dict()+元组
items = [('height', 180), ("weigh", 124)]
D = dict(items)
D2 = {'height': 180,'weigh': 124}
# 字典的遍历
键用来获取数据,最常用的键的类型是字符串,值用来保存数据,键应该是唯一的。
输出: 输出的顺序和定义的顺序一般不同,因为字典是一个无顺序的数据类型
{‘gender’: True, ‘age’: 18, ‘name’: ’ xiaoming’, ‘weight’: 65, ‘height’: 1.75}
2.字典的基本操作:查询,增加,修改,获取
xiaoming_dict={“name”:“xiaoming”}
1.查询:中括号+Key,指定的Key不存在时,程序会报错(取值)
print (xiaoming_dict[“name”])
2.增加键值对,如果key存在会修改该值,如果不存在会新增一个键值对
xiaoming_dict[“age”]=18
3.修改变量值,格式增肌键值对相同
xiaoming_dict[“name”]=“xiaoxiaoming”
4.删除指定键值对,key不对程序报错
xiaoming_dict.pop(“name”)
print(xiaoming_dict)
删除后输出:{‘age’: 18}
5 获取 键 对应的值,如果键不存在,则返回None,比第一种方法好用 (default用于指定键不存在时返回类型)
dict.get(key, default=None)
6.返回所有值
z={“a”:1, “b”:2}
print(z.values())
#输出 [1, 2]
3.字典的统计、合并、清空
xiaoming_dict={“name”:“xiaoming”,“age”: 18}
1.统计键值对的数量,(输出2)
print(len(xiaoming_dict))
2.合并字典
temp_dict={“height”: 1.75, “age”: 20}
xiaoming_dict.update(temp_dict)
输出:{‘age’: 20, ‘name’: ‘xiaoming’, ‘height’: 1.75}
被合并的字典中已经包含存在的键值对,原有的会被覆盖,如此例子中的name.
3.清空字典
xiaoming_dict.clear()
print(xiaoming_dict)
输出:{}
4.字典的循环遍历
xiaoming={"name": " xiaoming","qq": "123456","phone": "10086"}
#变量K是每一次循环中获取到的键值对的Key
for k in xiaoming:print ("%s-%s"%(k,xiaoming[k]))
输出:
qq-123456
phone-10086
name- xiaoming
5.返回最大“值”对应的“键”
counts={1: 1, 2: 1, 3: 1, 4: 2, 5: 4}
max(counts.keys(), key=counts.get)
key=counts.get 中的key 是max的参数,
counts.keys()获取的是字典的所有值,获取最大值之后,用get 返回最大的的键?
6.应用场景
字典一般与列表一起使用,定义多个字典,放在同一个列表变量中,循环遍历列表,在循环体中对每一个字典进行相同的处理。
card_list=[{"name": "zhangsan","qq": "12345","phone": "110"},{"name": "lisi","qq": "123457","phone": "10086"}
]
for card_info in card_list:print(card_info)
输出
{'qq': '12345', 'phone': '110', 'name': 'zhangsan'}
{'qq': '123457', 'phone': '10086', 'name': 'lisi'}
pop(key)
弹出对应的值
dit={1:"r",2:"b"}
print(dit.pop(1))
print (dit)
leetcode128:重复元素,hash表实现线性时间查询
class Solution(object):def singleNumber(self, nums):""":type nums: List[int]:rtype: int"""li={}for val in nums:try:li.pop(val)except:li[val]=1return li.popitem()[0] # 弹出元素,键为需要的答案
7.集合
集合-不可变的无序集合,元素唯一,用大括号定义,支持集合的交和并操作
set1 = {1, 2, 3}
set2 = set([2, 3, 4])
set3 = {1,1,2,3,5} # 实际set3 = {1,1,2,3,5}
print(set1 - set2) # 集合求差,包含在x 但是不包含在y中的元素:{1}
print(set1 | set2) # 集合求并:{1, 2, 3, 4}
print(set1 & set2) # 集合求交:{2, 3}
print(set1 ^ set2) # 集合求异或, 只被一个集合包含的元素 {1, 4}
print(set1 > set2) # 包含关系,set1 真包含于set2,返回True :False