马哥博客作业第四周

python字典

Dict即Dictionary,也称为mapping。
Python中,字典由任意个元素构成的集合,每一个元素称为Item,也称为Entry。这个Item是由(key,value)组成的二元组。
字典是可变的、无序的、key不重复的key-value键值对集合。

初始化
dict(**kwargs)使用name=value对初始化一个字典
dict(iterable,**kwarg)使用可迭代对象和name=value对构造字典,不过可迭代对象的元素必须是一个二元结构**
dict(mapping,**kwarg)使用一个字典构建另一个字典
字典的初始化方法都非常常用,都需要会用
d1={}  #{}
d2=dict() #返回{}
d3=dict(a=100,b=200)  #返回 {'a': 100, 'b': 200}
d4=dict(d3)#构造另外一个字典 #返回 {'a': 100, 'b': 200}
d5=dict(d4,a=300,c=400)  #返回 {'a': 300, 'b': 200, 'c' : 400}
d6=dict([('a',100),['b',200],(1,'abc')],b=300,c=400) #返回 {'a': 100, 'b': 300, 1: 'abc', 'c': 400}
#类方法dict.fromkeys(iterable,value)
d=dict.fromkeys(range(5))
d=dict.fromkeys(range(5),0)

 

 

元素访问
d[key]
d = {'a' : 200, 'b' : 300, 'c' : 400}
d['a']

 

返回key对应的值value
key不存在抛出KeyError异常

get(key[,default])
d = {'a' : 200, 'b' : 300, 'c' : 400}
print(d.get('d', 333))
print(d.get('a'))
print(d)
返回key对应的值value
key不存在返回缺省值,如果没有设置缺省值就返回None

setdefault(key[,default])
d = {'a' : 200, 'b' : 300, 'c' : 400}
print(d.setdefault('d', 333))
print(d.setdefault('a'))
print(d)

 

 返回key对应的值value
key不存在,添加kv对,value设置为default,并返回default,如果default没有设置,缺省为None

 

新增和修改
d[key]=value
将key对应的值修改为value
key不存在添加新的kv对
update([other])->None
使用另一个字典的kv对更新本字典
key不存在,就添加
key存在,覆盖已经存在的key对应的值
就地修改
d={}
d['a']=1
print(d)
d.update(red=1)
print(d)
d.update({'red':3})
print(d)

 

 

删除
pop(key[,default])
d = {'a' : 200, 'b' : 300, 'c' : 400}
d.pop('a')

 

key存在,移除它,并返回它的value
key不存在,返回给定的default
default未设置,key不存在则抛出KeyError异常
popitem()
d = {'a' : 200, 'b' : 300, 'c' : 400}
d.popitem()

 

 

移除并返回一个任意的键值对
字典为empty,抛出KeyError异常
clear()
清空字典

 

遍历
1、遍历Key
d = {'a' : 200, 'b' : 300, 'c' : 400}
for k in d:
    print(k)
for k in d.keys():
    print(k)

 

 

2、遍历Value
d = {'a' : 200, 'b' : 300, 'c' : 400}
for v in d.values():
    print(v)
for k in d.keys():
    print(d[k])
    print(d.get(k))

 

3、遍历Item
d = {'a' : 200, 'b' : 300, 'c' : 400}
for item in d.items():
    print(item)
    print(item[0],item[1])
for k,v in d.items():
    print(k,v)

 

 

d = {'a' : 200, 'b' : 300, 'c' : 400}
for k, _ in d.items():
    print(k)
for _, v in d.items():
    print(v)

 

 

Python3中,keys、values、items方法返回一个类似一个生成器的可迭代对象
Dictionaryview对象,可以使用len()、iter()、in操作
字典的entry的动态的视图,字典变化,视图将反映出这些变化
keys返回一个类set对象,也就是可以看做一个set集合。如果values都可以hash,那么items也可以看做是类set对象
Python2中,上面的方法会返回一个新的列表,立即占据新的内存空间。所以Python2建议使用
iterkeys、itervalues、iteritems版本,返回一个迭代器,而不是返回一个copy
 
遍历与删除
#错误的做法
d = dict(a = 1, b = 2, c = 3)
for k, v in d.items():
    print(d.pop(k))
在使用keys、values、items方法遍历的时候,不可以改变字典的size
while len(d):
    print(d.popitem())
上面的while循环虽然可以移除字典元素,但是很少使用,不如直接clear。
 
#for循环正确删除
d = dict(a = 1, b = 2, c = 3)
keys = []
for k, v in d.items():
    keys.append(k)
for k in keys:
    d.pop(k)
 
key
字典的key和set的元素要求一致
set的元素可以就是看做key,set可以看做dict的简化版
hashable可哈希才可以作为key,可以使用hash()测试
使用key访问,就如同列表使用index访问一样,时间复杂度都是O(1),这也是最好的访问元素的方式

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

posted @ 2020-04-13 13:50  爱python的小发  阅读(97)  评论(0)    收藏  举报