Python字典及常用操作方法

字典是Python的一种常用的数据结构,它用于存放具有映射关系的数据
字典相当于保存了两组数据,其中一组数据是关键数据,被称为 key;另一组数据可通过 key 来访问,被称为 value
字典中的 key 不允许重复
字典键的特性
字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。

两个重要的点需要记住:
1)不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
2)键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行

字典内置函数&方法

Python字典包含了以下内置函数:

序号 函数及描述
1 cmp(dict1, dict2)
比较两个字典元素。
2 len(dict)
计算字典元素个数,即键的总数。
3 str(dict)
输出字典可打印的字符串表示。
4 type(variable)
返回输入的变量类型,如果变量是字典就返回字典类型。

Python字典包含了以下内置方法:

序号 函数及描述
1 dict.clear()
删除字典内所有元素
2 dict.copy()
返回一个字典的浅复制
3 dict.fromkeys(seq[, val])
创建一个新字典,以序列 seq 中元素做字典的键,val 为字典所有键对应的初始值
4 dict.get(key, default=None)
返回指定键的值,如果值不在字典中返回default值
5 dict.has_key(key)
如果键在字典dict里返回true,否则返回false
6 dict.items()
以列表返回可遍历的(键, 值) 元组数组
7 dict.keys()
以列表返回一个字典所有的键
8 dict.setdefault(key, default=None)
和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default
9 dict.update(dict2)
把字典dict2的键/值对更新到dict里
10 dict.values()
以列表返回字典中的所有值
11 pop(key[,default])
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
12 popitem()
返回并删除字典中的最后一对键和值

# 创建字典
# 可使用花括号语法来创建字典,也可使用 dict() 函数来创建字典
scores = {‘语文’: 91, ‘数学’: 95, ‘英语’: 92}
print(‘scores字典:’,scores)
n=len(scores) #字典元素个数
print(“scores 字典元素个数:%d” %(n))

# 输出一个list格式(非真正意义上的list)
print(scores.items()) # dict_items([(‘语文’, 91), (‘数学’, 95), (‘英语’, 92)])

# 把字典的key 和 value 转成一个多维list
print(list(scores.items())) # [(‘语文’, 91), (‘数学’, 95), (‘英语’, 92)]

# 输出字典可打印的字符串
print(str(scores)) # {‘语文’: 91, ‘数学’: 95, ‘英语’: 92}

# 返回输入的变量类型,如果变量是字典就返回字典类型
print(type(scores)) # <class ‘dict’>

print(”)

# 空的花括号代表空的dict
d={} # 或 d=dict()
print(‘空字典:’,d)

# 使用元组作为dict的key
# 注意: 元组可以作为 dict 的 key,但列表不能作为元组的 key
# 这是由于 dict 要求 key 必须是不可变类型,但列表是可变类型,因此列表不能作为元组的 key
d2 = {(10, 50):’good’, 20:’bad’}
print(d2)

# 使用关键字参数来创建字典
d3 = dict(spinach = 2.39, cabbage = 3.59)
print(d3)

# 在使用dict()函数创建字典时,可以传入多个列表或元组参数作为key-value对,每个列表或元组将被当成一个key-value 对,
# 因此这些列表或元组都只能包含两个元素
# 如:创建包含3组key-value对的字典
vegetables = [(‘jerry’, 2.58), (‘brocoly’, 2.29), (‘settuce’, 3.19)]
d3 = dict(vegetables)
print(d3)

# 字典访问
# 通过 key 访问 value
dict = {‘语文’: 91, ‘数学’: 95, ‘英语’: 92}
print(‘语文:’,dict[‘语文’]) #如果用字典里没有的键访问数据,会输出错误

dict[‘语文’]=98 #修改字典 如果不存在就添加
print(‘语文:’,dict[‘语文’])

print(“音乐:”,dict.get(‘音乐’,-1)) #使用get获取key的值,若key不存在返回默认指定的值

dict.setdefault(‘物理’,88) #只能新增
dict.setdefault(‘物理’,78) #只能新增 第二次就失效了

print(dict.keys()) #获取所有的key 值
print(dict.values()) #获取所有的value 值

if ‘化学’ in dict: #判断key是否存在
print(‘key=化学 存在’)
else:
print(‘key=化学 不存在’)

if ‘体育’ not in dict: #如果key不存在 就添加
dict.setdefault(‘体育’,60)

for k,v in dict.items(): #遍历字典
print(k,v)
print(”)

for k in dict:
print(k,dict[k])
print(k,dict.get(k)) # 取值速度快,性能好
print(”)

# update()方法
# update() 方法可使用一个字典所包含的 key-value 对来更新己有的字典。
# 在执行 update() 方法时,
# 如果被更新的字典中己包含对应的 key-value 对,那么原 value 会被覆盖;
# 如果被更新的字典中不包含对应的 key-value 对,则该 key-value 对被添加进去
cars = {‘BMW’: 8.5, ‘BENS’: 8.3, ‘AUDI’: 7.9}
cars.update({‘BMW’:4.5, ‘PORSCHE’: 9.3})
print(cars)

# 删除字典元素

# 删除指定key的字典 如果key不存在会引发异常
dict.pop(‘物理’) # 或 del dict[‘key’] #必须要传值,因为字典是无序的

# 随机删除一个
dict.popitem()

# 清空字典
dict.clear()