目录
一、python字典基础
1.字典常用操作
- # list(d):返回字典 d 中使用的所有键的列表。
- # len(d):返回字典 d 中的项数。
- # d[key]:返回 d 中以 key 为键的项。 如果映射中不存在 key 则会引发 KeyError。
- # d[key] = value:将 d[key] 设为 value。
- # del d[key]:将 d[key] 从 d 中移除。 如果映射中不存在 key 则会引发 KeyError。
- # key in d:如果 d 中存在键 key 则返回 True,否则返回 False。
- # key not in d:等价于 not key in d。
- # iter(d):返回以字典的键为元素的迭代器。 这是 iter(d.keys()) 的快捷方式。
2.字典函数合集
(1)dict.clear()
删除字典所有元素
(2)dict.copy()
返回字典的浅复制
(3)dict.fromkeys(seq[, val])
创建新字典,seq中元素做字典的键,val 为所有键的初始值
(4)dict.get(key, None)
返回指定键的值,如果值不在字典中返回None值
(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()
随机返回并删除字典中的一对键和值。
3.字典结构形式
dict1 = {key1 : value1, key2 : value2 }
(1)key为键,value为值; 同一字典键不能重复,否则后者会覆盖前者
(2)字典是无序的
4.字典与列表、元组、集合
(1)列表:list1= ['value1','value2']
有序,内容可增删改查,value可重复
(2)字典:dict1 = {key1 : value1, key2 : value2 }
无序,内容可增删改查,key不能重复,value可重复
(3)元组:tuple1 = ('value1','value2')
有序,内容可增删查,不可修改,value可重复
(4)集合:set1 = set('value1','value2')
无序,内容可增删查,不可修改,value不可重复
5.字典遍历
(1)遍历key值
a={'a': '1', 'b': '2', 'c': '3'}
for key in a:
print(key+':'+a[key]
for key in a.keys():
print(key+':'+a[key])
在使用上,for key in a和 for key in a.keys():完全等价。
(2)遍历value值
for value in a.values():
print(value)
(3)遍历字典项
for kv in a.items():
print(kv)
('a', '1')
('b', '2')
('c', '3')
(4)遍历字典健值
for key,value in a.items():
print(key+':'+value)
for (key,value) in a.items():
print(key+':'+value)
a:1
b:2
c:3
6.字典交并差集
(1)并集
dict1 = { "name":"owen", "age": 18 }
dict2 = { "birthday": "1999-11-22", "height": 180 }
dict3={"key1":"cat","key2":"dog"}
dictMerged2 = dict( dict1, **dict2,**dict3)
或
dictMerged2.update( dict2 )
(2)交集
merge_dict={ key1:dict1[key1] for key1 in dict1.keys()& dict2.keys()}
(3)差集
merge_dict={ key1:dict1[key1] for key1 in dict1.keys()-dict2.keys()}
(4)对称差集
m1={ key1:dict1[key1] for key1 in dict1.keys()-dict2.keys()}
m2=({ key1:dict2[key1] for key1 in dict2.keys()-dict1.keys()})
m1.update(m2)
print(m1)
7.字典推导式
key_list=['a','b','c']
value_list=[1,2,3]
mcase_frequency = {k:v for k, v in zip(key_list,value_list)}
print(mcase_frequency)
#{'a': 1, 'b': 2, 'c': 3}
doc_dict={line[0]:line[1] for line in doc_list}
8.常用属性与方法
del dict['Name'] # 删除键 'Name'
dict.clear() # 清空字典
del dict # 删除字典
9.Python字典方法
(1)dict.clear() 删除字典元素与清空
del dict['Name'] # 删除键 'Name'
dict.clear() # 清空字典
del dict # 删除字典
(2)dict.copy() 返回一个字典的浅复制
#!/usr/bin/python3
dict1 = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
dict2 = dict1.copy()
print ("新复制的字典为 : ",dict2)
(3)fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
dict.fromkeys(seq[, value]))
seq -- 字典键值列表。
value -- 可选参数, 设置键序列(seq)的值。
seq = ('name', 'age', 'sex')
dict = dict.fromkeys(seq)
print ("新的字典为 : %s" % str(dict))
dict = dict.fromkeys(seq, 10)
print ("新的字典为 : %s" % str(dict))
(4)get() 函数返回指定键的值,如果值不在字典中返回默认值
dict.get(key, default=None)
key -- 字典中要查找的键。
default -- 如果指定键的值不存在时,返回该默认值值。
dict = {'Name': 'Runoob', 'Age': 27}
print ("Age 值为 : %s" % dict.get('Age'))
print ("Sex 值为 : %s" % dict.get('Sex', "NA"))
(5)has_key() 字典 in 操作符用于判断键是否存在于字典中,如果键在字典dict里返回true,否则返回false。
key in dict
key -- 要在字典中查找的键。
dict = {'Name': 'Runoob', 'Age': 7}
# 检测键 Age 是否存在
if 'Age' in dict:
print("键 Age 存在")
else :
print("键 Age 不存在")
(6)items() 方法以列表返回可遍历的(键, 值) 元组数组
dict.items()
以下实例展示了 items() 方法的使用方法:
dict = {'Name': 'Runoob', 'Age': 7}
print ("Value : %s" % dict.items())
(7)keys() 方法以列表返回一个字典所有的键
dict.keys()
以下实例展示了 dict.keys() 方法的使用方法:
#!/usr/bin/python3
dict = {'Name': 'Runoob', 'Age': 7}
print ("字典所有的键为 : %s" % dict.keys())
(8)setdefault() 方法和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值。
dict.setdefault(key, default=None)
key -- 查找的键值。
default -- 键不存在时,设置的默认键值。
#!/usr/bin/python3
dict = {'Name': 'Runoob', 'Age': 7}
print ("Age 键的值为 : %s" % dict.setdefault('Age', None))
print ("Sex 键的值为 : %s" % dict.setdefault('Sex', None))
print ("新字典为:", dict)
以上实例输出结果为:
Age 键的值为 : 7
Sex 键的值为 : None
新字典为: {'Age': 7, 'Name': 'Runoob', 'Sex': None}
(9)update() 函数把字典dict2的键/值对更新到dict里。
dict.update(dict2)
dict2 -- 添加到指定字典dict里的字典。
以下实例展示了 update()函数的使用方法:
#!/usr/bin/python3
dict = {'Name': 'Runoob', 'Age': 7}
dict2 = {'Sex': 'female' }
dict.update(dict2)
print ("更新字典 dict : ", dict)
以上实例输出结果为:
更新字典 dict : {'Sex': 'female', 'Age': 7, 'Name': 'Runoob'}
(10)values() 方法以列表返回字典中的所有值
dict.values()
以下实例展示了 values() 方法的使用方法:
#!/usr/bin/python3
dict = {'Sex': 'female', 'Age': 7, 'Name': 'Zara'}
print ("字典所有值为 : ", list(dict.values()))
以上实例输出结果为:
字典所有值为 : ['female', 'Zara', 7]
(11)pop() 方法删除字典给定键 key 所对应的值,返回值为被删除的值
>>> site= {'name': '菜鸟教程', 'alexa': 10000, 'url': 'www.runoob.com'}
>>> pop_obj=site.pop('name')
>>> print(pop_obj)
菜鸟教程
(12) popitem() 随机返回并删除字典中的一对键和值(一般删除末尾对)
#!/usr/bin/python3
site= {'name': '菜鸟教程', 'alexa': 10000, 'url': 'www.runoob.com'}
pop_obj=site.popitem()
print(pop_obj)
print(site)
输出结果为:
('url', 'www.runoob.com')
{'name': '菜鸟教程', 'alexa': 10000}
二、defaultdict字典
1.defaultdict优点
调用dict不存在的key的时会引起KeyError报错,使用defaultdict则不会,而是返回默认值
2.语法参数案例
dict =defaultdict( factory_function)
factory_function是list、set、str等,作用是当key不存在时,返回默认值,
list默认为[ ],str是空字符串,set对应set( ),int对应0
案例:
from collections import defaultdict
s = [('red', 1), ('blue', 2), ('red', 3)]
d = defaultdict(set)
for k, v in s:
d[k].add(v)
print(d)
三、自定义函数作为字典值
# 函数作为字典的值
1.注意事项:
字典里函数名不加括号,调用时在字典后加括号dickey
2.实现代码简化
# 当需要用到3个及以上的if...elif...else时就要考虑该方法进行简化
# 通过将函数名称当做字典的值,利用字典的关键字查询,可以快速定位函数,进行执行
3.案例
def a():
print('aa')
def b():
print('bb')
dic = {1:a,2:b}
#调用函数a()
dic[1]()
#结果:
aa
#通过用户输入来选择执行的函数
cmd = input('输入像要调用函数的key:\n')
dic[int(cmd)]()