两大特点:无序,键唯一
无序存储,键值对的形式存储数据
键是唯一不可修改的,不能用列表做键
2、python中不可变类型:整形,字符串,元组
可变类型:字典,列表
3、字典中方法:
增加:
dic1 = {'name':'alex'}
dic1 = ['age'] =18
*dic1 = {'age':18,'name':'alex'}
dic1.setdefault() 键存在,不改动,返回字典相应键对应的值,键不存在,在字典中增加新的键值对,并返回相应的值
查找:
通过键查找
dic1.keys()打印字典中所有键
#dict1.keys['name','age'] --转换成列表:list(dic1.keys())
dic1.values()打印字典中所有值
dic1.items()打印所有键值对
修改:
直接赋值
dic3= {'name':'alex','age':18}
dic4 = {'sex':'male','age':36}
dic3.update(dic4) #有相同的key,值会修改
删除:
dic.clear() #清空字典
del dic['name'] #删除字典中指定键值对
dic.pop('age')#删除字典中指定键值对,并返回该键值对的值
dic.popitem() #随机删除键值对,并以元组方式返回
其他操作涉及的方法:
dic1 =dict.formkeys(['host1','host2'],'test')#{'host1':'test','host2':'test'}
dic1 =dict.formkeys(['host1','host2','host3'],['test1','test2'])#{'host1':['test1','test2'],'host2':['test1','test2'],'host3':['test1','test2']}
dic1['host2'][1] = 'test3' #{'host3':['test1''test3'],'host2':['test1''test3'],'host1':['test1''test3']}
字典的嵌套:
字典的排序:
字典的遍历:
字符串的操作
a = '123'
b= 'abc'
c = a+b #123abc
c='****'.join([a,b])#123****abc
st = 'hello kitty{name} is {age}'
st.count('l') #2 统计元素个数
st.captialize() #Hello kitty 首字母大写
st.center(50,'-')#--------hello kitty --------居中
st.endswith('tty3')#判断是否以某个内容结尾
st.startswith('he')#判断是否以某个内容开头
st.find('t') #8 查找第一个元素,并返回索引,不存在是返回-1
st.format(name = 'alex',age= 37)#hello kitty alex is 37
st.format_map({'name' :'alex','age':27})#hello kitty alex is 27
st.index('t') #8 返回索引,找不到报错
‘ab'.isalnum()
'123'.isdigit()
具体函数有 set(),pop(),update(),items(),keys(),values(),get(),setdefault()
python 字典操作
假设字典为 dics = {0:'a', 1:'b', 'c':3}
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
>>>print dics.get('a')
0
>>>print dics.get('Paul')
None
dict.get(key,default=None) 两个选项 一个 key 一个 default= None ----default可以是任何strings(字符)
2.从字典中取值,若找到则删除;当键不存在时,显示异常key error
[方法] dics.pop('key')
3.给字典添加一个条目。如果不存在,就指定特定的值;若存在,就算了。
[方法] dic.setdefault(key, value)
4. update
>>>a = {'a':1,'b':2}
>>>a.update({'c':3})
>>>a
{'a': 1,'c': 3,'b': 2}
>>>a.update({'c':4})
>>>a
{'a': 1,'c': 4,'b': 2}
dict的作用是建立一组 key 和一组 value 的映射关系,dict的key是不能重复的。
有的时候,我们只想要 dict 的 key,不关心 key 对应的 value,目的就是保证这个集合的元素不会重复,这时,set就派上用场了。
字典是一种可变、无序容器数据结构。元素以键值对存在,键值唯一。它的特点搜索速度很快:数据量增加10000倍,搜索时间增加不到2倍;当数据量很大的时候,字典的搜索速度要比列表快成百上千倍。
在Python中,字典是通过散列表(哈希表)实现的。字典也叫哈希数组或关联数组,所以其本质是数组(如下图),每个 bucket 有两部分:一个是键对象的引用,一个是值对象的引用。所有 bucket 结构和大小一致,我们可以通过偏移量来读取指定 bucket。
定义一个字典 dic = {},假设其哈希数组长度为8。
Python会根据哈希数组的拥挤程度对其扩容。“扩容”指的是:创造更大的数组,这时候会对已经存在的键值对重新进行哈希取余运算保存到其它位置;一般接近 2/3 时,数组就会扩容。扩容后,偏移量的数字个数增加,如数组长度扩容到16时,可以用最右边4位数字作为偏移量。
计算键对象 name 的哈希值,然后比较哈希数组对应索引内的bucket是否为空,为空返回 None ,否则计算这个bucket的键对象的哈希值,然后与 name 哈希值比较,相等则返回 值对象 ,否则继续左移计算哈希值。
注意:
1.键必须为可哈希的,如数字、元组、字符串;自定义对象需要满足支持hash、支持通过 __eq__() 方法检测相等性、若 a == b 为真,则 hash(a) == hash(b) 也为真。
2.字典的内存开销很大,以空间换时间。
3.键查询速度很快,列表查询是按顺序一个个遍历,字典则是一步到位。
4.往字典里面添加新键可能导致扩容,导致哈希数组中键的次序变化。因此,不要在遍历字典的同时进行字典的修改。