字典(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'}