python 字典

1.定义

字典是 无序键不重复 且 元素只能是键值对可变的容器

 

  • 容器

 

  • 元素必须键值对
  • 键不重复,重复则会被覆盖
  • 无序(在Python3.6+字典就是有序了,之前的字典都是无序。)

example:

  v1 = {}
  v2 = dict()

字典中对键值得要求:

  • 键:必须可哈希。 目前为止学到的可哈希的类型:int/bool/str/tuple;不可哈希的类型:list/set/dict。(集合)

  • 值:任意类型。

# 合法:    

data_dict = {
  "流年":29,
  True:5,
  123:5,
  (11,22,33):["alex","eric"]
}

不合法:

# 不合法
v1 = {
  [1, 2, 3]: '周杰伦',  # 列表非可哈希,不能作为字典的键
  "age" : 18
}
v2 = {
  {1,2,3}: "哈哈哈",  # 集合非可哈希,不能作为字典的键
  'name':"alex"
}

v3 = {
  {"k1":123,"k2":456}: '呵呵呵',  # 字典非可哈希,不能作为字典的键
  "age":999
}

2.独有功能

2.1.获取值 get()

d1 = {11:22, 33:44, 's':'d'}

d1.get('s')  # 'd'

d1.get('xxx')  # 如果找不到该键,那么返回None

2.2.获取所有键 keys()

d1 = {11:22, 33:44, 's':'d'}

v1 = d1.keys()  # py3 ->dict_keys([11,33,'s'])  py2 -> ['age', 'status', 'name', 'email']

list(v1)  # [11,33,'s']

注意:在Python2中 字典.keys()直接获取到的是列表,而Python3中返回的是高仿列表,这个高仿的列表可以被循环显示。

2.3.获取所有值 values()

d1 = {11:22, 33:44, 's':'d'}

v1 = d1.values()  # py3->   dict_values([22,44,'d'])  py2-> [22,44,'d']

注意:在Python2中 字典.values()直接获取到的是列表,而Python3中返回的是高仿列表,这个高仿的列表可以被循环显示。

2.4.获取所有键值 items()

d1 = {11:22, 33:44, 's':'d'}

 d1.items()  # dict_items([(11,22),(33,44),('s','d')])

for item in info.items():
  print(item[0],item[1])   # item是一个元组 (键,值)

for key,value in info.items():
  print(key,value)   # key代表键,value代表值,将兼职从元组中直接拆分出来了。

2.5.设置值 setdefault(key,value)

d1 = {11:22, 33:44, 's':'d'}

d1.setdefault('a', 'b')  #  {11:22, 33:44, 's':'d', 'a':'b'}

2.6.更新字典键值对 update(key,value)

d1 = {11:22, 33:44, 's':'d'}

d1.setdefault({11:33, 'd':'f'})  #  {11:22, 33:44, 's':'d', 'a':'b'}

2.7.移出指定键值对 pop(key)

d1 = {11:22, 33:44, 's':'d'}

s = d1.pop({'s':'f'})  #  {11:22, 33:44}

print('s')  # 返回弹出键的值  'd'

print(d1)  # {11:22, 33:44}

2.8.按照顺序移出 popitems(key)

d1 = {11:22, 33:44, 's':'d'}

s = d1.popitems()  # 返回弹出的键值对  ('s':'d')

print(d1)  # {11:22, 33:44}

注意:

 

  py3.6后,popitem移除最后的值。

 

  py3.6之前,popitem随机删除。

3.公共功能

3.1.求并集(Python3.9新加入)   |

v1 = {"k1": 1, "k2": 2}
v2 = {"k2": 22, "k3": 33}

v3 = v1 | v2
print(v3) # {'k1': 1, 'k2': 22, 'k3': 33}

3.2.长度  len()

v1 =len(v1)  # 几组键值对

3.3.是否包含  in

info = {'age':18, 'name':'Liunian'}

v1 = "age" in info

v2 = "age" in info.keys()

v3 = 'Liunian' in info.values()

info = {"age": 12, "status": True, "name": "流年"}
# 输出info.items()获取到的 dict_items([ ('age', 12), ('status', True), ('name', 'wupeiqi'), ('email', 'xx@live.com') ])
v1 = ("age", 12) in info.items()
print(v1)

3.4.索引

字典不同于元组和列表,字典的索引是,而列表和元组则是 0、1、2等数值

info = { "age":12, "status":True, "name":"武沛齐"}

print( info["age"] ) # 输出:12
print( info["xxxx"] ) # 报错,通过键为索引去获取之后时,键不存在会报错(以后项目开发时建议使用get方法根据键去获取值)

value = info.get("xxxxx") # None
print(value)

3.5.根据键 修改值 和 添加值 和 删除键值对

上述示例通过键可以找到字典中的值,通过键也可以对字典进行添

info = {"age":12, "status":True,"name":"流年"}

info["gender"] = "男"  # 没有该键,增加

info["age"] = "18"   # 有该键,修改

del info['age']  # 删除

3.6.for循环

for item in dict1

for item in dict1.keys()

for item in dict1.values()

for key,value in dict1.items()

4.转换为字典

v = dict( [ ("k1", "v1"), ["k2", "v2"] ] )

print(v) # { "k1":"v1", "k2":"v2" }

info = { "age":12, "status":True, "name":"liunian" }

v1 = list(info)       # ["age","status","name"]

v2 = list(info.keys())    # ["age","status","name"]

v3 = list(info.values())   # [12,True,"liunian"]

v4 = list(info.items())     # [ ("age",12), ("status",True), ("name","liunian") ]

5.存储原理

因为字典的键是可哈希的(int,bool,str,tuple),所以按键取值速度也都快

嵌套:多数据嵌套的时候需要注意以下几点

  1.字典的键必须可哈希(list,set,dict不可哈希)

  2.字典的值可以是任意类型

  3.字典的键和集合的元素在遇到 布尔值 和 1、0 时,需注意重复的情况。

  4.元组的元素不可以被替换。

posted @ 2022-09-27 18:44  夜落繁华时  阅读(132)  评论(0)    收藏  举报