目录
字典(dict)
不可变(可哈希)的数据类型:int,str,bool,tuple。
可变(不可哈希)的数据类型:list,dict,set。
字典是Python中的映射类型,它以{}括起来,里面的内容是以键值对的形式储存的:
Key: 不可变(可哈希)的数据类型.并且键是唯一的,不重复的。
Value:任意数据(int,str,bool,tuple,list,dict,set),包括后面要学的实例对象等。
在Python3.5版本(包括此版本)之前,字典是无序的。
在Python3.6版本之后,字典会按照初建字典时的顺序排列(即第一次插入数据的顺序排序)
优点:
(1)二分查找去查询(2)存储大量关系型数据
缺点:
内存消耗巨大
1.1字典的创建
(1)方式一:
# 方式1:
dic1 = dict((('one', 1),('two', 2),('three', 3)))
dic2 = dict([('one', 1),('two', 2),('three', 3)])
print(dic1) # {'one': 1, 'two': 2, 'three': 3}
print(dic2) # {'one': 1, 'two': 2, 'three': 3}
(2)方式二:
# 方式2:
dic = dict(one=1,two=2,three=3)
print(dic) # {'one': 1, 'two': 2, 'three': 3}
(3)方式三:
# 方式3:
dic = dict({'one': 1, 'two': 2, 'three': 3})
print(dic) # {'one': 1, 'two': 2, 'three': 3}
(4)方式四:
# 方式4:
dic = dict(zip(['one', 'two', 'three'],[1, 2, 3]))
print(dic)
(5)方式五:
# 方式5: 字典推导式
dic = { k: v for k,v in [('one', 1),('two', 2),('three', 3)]}
print(dic)
1.2增
dic1 = {'age':18,'name':'jin','sec':'male',}
(1)通过键值对直接增加
dic1['high'] = 185 #字典中原来没有键值对,就添加
print(dic1) #{'age': 18, 'name': 'jin', 'sec': 'male', 'high': 185}
dic1['age'] = 16 #字典中原来有键值对,则更新值
print(dic1) #{'age': 16, 'name': 'jin', 'sec': 'male'}
(2)setdefault()方法:
字典中有键值对不做任何改变,没有键值对则添加,如果value没有被设置值,则value默认为None
dic1.setdefault('weight') #没有键值对,则添加,添加默认值为’None‘
print(dic1) #{'age': 18, 'name': 'jin', 'sec': 'male', 'weight': None}
dic1.setdefault('weight',150) #没有键值对,则添加
print(dic1) #{'age': 18, 'name': 'jin', 'sec': 'male', 'weight': 150}
dic1.setdefault('name','二哥') #有键值对,则不做任何改变
print(dic1) #{'age': 18, 'name': 'jin', 'sec': 'male'}
1.3删
dic1 = {'age':18,'name':'jin','sec':'male',}
(1)pop()方法:
删除键值对,返回值为删除的键的值,可以设置返回值;如果删除的键不在字典中,并且没有设置返回值则会报错
print(dic1.pop('age')) #18
print(dic1) #{'name': 'jin', 'sec': 'male'}
print(dic1.pop('二哥')) #报错:KeyError: '二哥'
print(dic1.pop('二哥',None)) #删除的键不在字典中,返回值为None
print(dic1.pop('age',None)) #删除的键在字典中,返回值为删除键的值
(2)popitem()方法:
随机删除(python3.6对字典进行了排序,默认删除最后一个),有返回值
#返回值是元组,里面是删除的键值。
print(dic1.popitem()) #('sec', 'male')
(3)del:
del dic1['name1'] #删除的键字典中没有,报错:KeyError: 'name1'
del dic1['name']
print(dic1) #{'age': 18, 'sec': 'male'}
del dic1 #删除整个字
(4)clear()方法:清空
print(dic1.clear()) #清空字典,返回值为None
print(dic1) #{}
1.4改
dic1 = {'age':18,'name':'jin','sec':'male',}
(1)通过键值对
dic1['age'] = 16 #字典中原来有键值对,则更新值
print(dic1) {'age': 16, 'name': 'jin', 'sec': 'male'}
(2) update()方法:
将dic1中的键值对更新到dic2中
dic2 = {"name":"alex","weight":75}
dic2.update(dic1)
print(dic1) #{'age': 18, 'name': 'jin', 'sec': 'male'}
print(dic2) #{'name': 'jin', 'weight': 75, 'age': 18, 'sec': 'male'}
1.4查:
print(dic1.keys(),type(dic1.keys())) #dict_keys(['age', 'name', 'sec']) <class 'dict_keys'>
print(dic1.values()) #dict_values([18, 'jin', 'male'])
print(dic1.items()) #dict_items([('age', 18), ('name', 'jin'), ('sec', 'male')])
打印字典的key:
for i in dic1.keys():
print(i)
#打印字典的key
for i in dic1:
print(i)
#打印字典的value:
for i in dic1.values():
print(i)
#打印字典的key和value:
for k,v in dic1.items():
print(k,v)
get()方法:
返回键的值,如果字典中没有键返回默认值None