字典(dictionary)是除列表以外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。
两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。
字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
字典的查询速率要高于列表,列表属于线性存储
#!/usr/bin/python
# -*- coding: UTF-8 –*-
d = {}
d['one'] = "This is one" #字典中添加元素 格式:字典名[键] = 值
d[''] = "This is two"
tinydict = {'name': 'john','code':6734, 'dept': 'sales'}
1、查
# 当通过索引取值时,如果 key 不存在,返回默认值:None,也可以指定默认值:d.get('key','str'),返回默认值:str
print(d.get('one1')) # 输出键为'one' 的值,键不存在不会报错,返回 None,推荐使用
# print(d['one1']) # 输出键为'one' 的值,如果键不存在则报错
print(d['2']) # 输出键为 '2' 的值
print(tinyd) # 输出完整的字典
print(tinyd.keys()) # 输出所有键
print(tinyd.values()) # 输出所有值
print(d.items()) # 获取所有的键值对
print('str' in d.keys()) # 检测字典中的key是否存在,返回 true、false
print(sorted(d)) # 默认按键名排序,排序也是要数据类型要一致,不然会报错
2、增
d2 = {}
d2['hjc'] = "boy" # 字典中添加元素 格式:字典名[添加的键] = 值,如果键存在,将修改键的值
d.update(d2) # 把字典2合并到字典1里去 格式:源字典.update(被合并的字典),如果存在同样的键,合并后会覆盖旧的键
d.update({'k1': 'v1'}) # 另一个添加方法
print(d) # {'one': 'This is one', '2': 'This is two', , }
3、改
d['hjc'] = "girl" # 字典用修改元素 格式:字典名[修改的键] = 值
# 如果 hobby 键不存在,则新建一对键值对,并打印,存在,则不做任何处理,并把存在的值打印出来
d.setdefault('hobby', 'girl')
print(d) # {'one': 'This is one', '2': 'This is two', 'hjc': 'girl', }
4、删
del d['hjc'] # 删除字典中的元素和值 格式:del 字典名['删除的键'],
d.clear() # 清除字典中的所有内容,返回空字典
print(d.pop('key')) # 删除对应的 key 和 value,如果键不存在会报错, 可以避免错误,返回 None
print(d.popitem()) # 随机删除一组键值对,没卵用
5、其他方法
dict1 = dict.fromkeys(['host1', 'host2', 'host3'],'test') # test 作为值,同时赋值给前面的 3 个键
print(dict1) # {'host1': 'test', 'host2': 'test', 'host3': 'test'}
dict1 = dict.fromkeys(['host1', 'host2', 'host3'], ['test1', 'test2']) # 值作为列表,赋值给前面的3个键,作为值
print(dict1) # {'host1': ['test1', 'test2'], 'host2': ['test1', 'test2'], 'host3': ['test1', 'test2']}
# 循环取 key:
for i in tinyd:
print(i)
# 循环遍历取 键值对;
# 法1:(推荐,效率最高)
for i in tinyd:
print(i, tinyd[i])
'''
name john
code 6734
dept sales
'''
# 法2:
for k, v in tinyd.items(): # items 默认输出键值对,这里设置变量,把 key 赋值给 k,value 赋值给 v
print(k, v)
'''
name john
code 6734
dept sales
'''
# 法3:
new_dic = dict(enumerate(tinyd))
print(new_dic) # {0: 'name', 1: 'code', 2: 'dept'}