字典是 python 中唯一的映射类型,使用键值对(key-value)的形式存储数据。其中 key 必须为不可变类型。字典有两大特点: 无序,键唯一。
不可变类型有:整型,字符串,元组
可变类型有:列表,字典
创建字典
dic1={"name": "klvchen", "age": 25} dic2=dict((('name','klvchen'),('age',25))) dic3=dict((('city','guangzhou'),)) # 只有一个键值对的时候,右边必须补 ,号
dic4=dict([['city','guangzhou'],]) dic5=dict(name="klvchen", age=25) # 注意,这里传入关键字参数的做法。参数的等号左边必须为一个变量,右边必须为一个值 print(dic1) print(dic2) print(dic3) print(dic4)
print(dic5)
结果:
{'name': 'klvchen', 'age': 25}
{'name': 'klvchen', 'age': 25}
{'city': 'guangzhou'}
{'city': 'guangzhou'}
{'age': 25, 'name': 'klvchen'}
fromkeys 方法
dic1 = dict.fromkeys(['host1', 'host2', 'host3'], 'well') print(dic1) 结果: {'host3': 'well', 'host1': 'well', 'host2': 'well'} dic2 = dict.fromkeys(['host1', 'host2', 'host3'], ['well1', 'well2']) print(dic2) 结果: {'host3': ['well1', 'well2'], 'host1': ['well1', 'well2'], 'host2': ['well1', 'well2']}
增加操作
dic1={"name": "klvchen"}
dic1["age"] = 28
print(dic1)
setdefault 方法
res = dic1.setdefault("age",29) # 键key存在,故返回原来的值
print(res)
res = dic1.setdefault("sex", 'male') # 键key不存在,故返回新值
print(res)
print(dic1)
结果:
{'name': 'klvchen', 'age': 28}
28
male
{'name': 'klvchen', 'age': 28, 'sex': 'male'}
查操作
dic1={'name': 'klvchen', 'age': 28, 'sex': 'male'}
print(dic1['name']) #通过键去查找
结果:
klvchen
dic1={'name': 'klvchen', 'age': 28, 'sex': 'male'}
print(dic1.keys()) #列出所有的 key
print(list(dic1.keys())) #把key格式化为数组格式
结果:
dict_keys(['name', 'sex', 'age']) ['name', 'sex', 'age']
dic1={'name': 'klvchen', 'age': 28, 'sex': 'male'} print(list(dic1.values())) #列出所有的值
结果:
['klvchen', 'male', 28]
dic1={'name': 'klvchen', 'age': 28, 'sex': 'male'} print(list(dic1.items())) #列出所有的 key 和 值
结果:
[('name', 'klvchen'), ('sex', 'male'), ('age', 28)]
dic1={'name': 'klvchen', 'age': 28, 'sex': 'male'} print(dic1.get('name')) 运行结果: klvchen
dic1={'name': 'klvchen', 'age': 28} print(dic1.get('obj')) print(dic1.get('sex', 'male')) 运行结果: None male
dic1={'name': 'klvchen', 'age': 28, 'sex': 'male'} print('name' in dic1) # 如果键在字典里返回true,否则返回false。 运行结果: True
改操作
dic1 = {'name': 'klvchen', 'age': 28, 'sex': 'male'} dic1["age"] = 25 print(dic1)
结果:
{'sex': 'male', 'age': 25, 'name': 'klvchen'}
dic1 = {'name': 'klvchen', 'age': 28, 'sex': 'male'} dic2 = {"age": 25, "city": "guangzhou"} dic1.update(dic2) print(dic1)
结果:
{'sex': 'male', 'age': 25, 'city': 'guangzhou', 'name': 'klvchen'}
删操作
del 方法
dic1 = {'name': 'klvchen', 'age': 28, 'sex': 'male'} del dic1['age'] print(dic1)
结果:
{'name': 'klvchen', 'sex': 'male'}
------------------------------------------------------------
dic1 = {'name': 'klvchen', 'age': 28, 'sex': 'male'}
del dic1
print(dic1)
结果:
NameError: name 'dic1' is not defined
注意,这里已把 dic1 这个字典从内存中删除,所以程序报错
pop方法 #删除字典中指定的键值对,并返回该键的值
dic1 = {'name': 'klvchen', 'age': 28, 'sex': 'male'} res = dic1.pop('age') print(dic1) print(res)
结果:
{'sex': 'male', 'name': 'klvchen'}
28
popitem 方法 # 随机删除某组键值对,并以元组的方式返回删除的值
dic1 = {'name': 'klvchen', 'age': 28, 'sex': 'male'} res = dic1.popitem() print(dic1) print(res)
结果:
{'name': 'klvchen', 'sex': 'male'}
('age', 28)
排序操作
sorted方法:
dic1 ={'a': 111, 'k': 222, 'c': 333} print(sorted(dic1)) print(sorted(dic1.items())) 结果: ['a', 'c', 'k'] [('a', 111), ('c', 333), ('k', 222)]
遍历操作
dic1 ={'a': 111, 'k': 222, 'c': 333} for i in dic1: print(i,dic1[i]) 结果: c 333 a 111 k 222
dic1 ={'a': 111, 'k': 222, 'c': 333} for i in dic1.items(): print(i) 结果: ('c', 333) ('a', 111) ('k', 222)
dic1 ={'a': 111, 'k': 222, 'c': 333} for k,v in dic1.items(): print(k, v) 结果: k 222 a 111 c 333
字典与字符串相互转换
a = str({'GuangZhou':{'region','tianhe'}}) print(type(a)) a=eval(a) print(type(a)) print(a['GuangZhou'])
结果:
<class 'str'>
<class 'dict'>
{'tianhe', 'region'}