1、字典dict定义 初始化
key-value键值对的数据的集合,可变、无序、key不重复(哈希、唯一)
1> d = dict() 或者 d = {}
#-*- coding:utf-8 -*-#version:python3.7
d1=dict()
d2={}print(d1)print(d2)
执行结果:
{}
{}
2> dict(**kwargs)使用name=value对初始化一个字典
d1 = dict(a=1,b=2,c=3) #或着:d1 = {‘a‘:1,‘b‘:2,‘c‘:3}print(d1)
执行结果:
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3}
3> dict(iterable, **kwarg)使用可迭代对象和name=value对构造字典,不过可迭代对象的元素必须是一个二元结构
d = dict(((‘a‘,1),(‘b‘,2),(‘c‘,3))) #或者:d = dict([(‘a‘,1),(‘b‘,2),(‘c‘,3)])print(d)
执行结果:
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3}
4>dict(mapping, **kwarg)使用一个字典构建另一个字典
l1 = [3,4]
d1= dict(a=1,b=2,c=l1)
d2=dict(d1)print(d1)print(d2)print(d2 ==d1)print(d2 isd1)
l1.append(5)
print(d1)
print(d2)
执行结果:
{‘a‘: 1, ‘b‘: 2, ‘c‘: [3, 4]}
{‘a‘: 1, ‘b‘: 2, ‘c‘: [3, 4]}
True
False
{‘a‘: 1, ‘b‘: 2, ‘c‘: [3, 4, 5]}
{‘a‘: 1, ‘b‘: 2, ‘c‘: [3, 4, 5]}
5>类方法dict.fromkeys(iterable, value=None)
d1 = dict.fromkeys(range(5))
d2= dict.fromkeys(range(5),0)print(d1)print(d2)
执行结果:
{0: None,1: None, 2: None, 3: None, 4: None}
{0: 0,1: 0, 2: 0, 3: 0, 4: 0}
6>key可哈希、不重复、可去重
d = {‘a‘:1,‘a‘:2}print(d)
执行结果:
{‘a‘: 2}
2、字典元素的访问
d[key]
返回key对应的值value
key不存在抛出KeyError异常
get(key[, default])
返回key对应的值value
key不存在返回缺省值,如果没有设置缺省值就返回None
setdefault(key[, default])
返回key对应的值value
key不存在,添加kv对,value设置为default,并返回default,如果default没有设置,缺省为None
#-*- coding:utf-8 -*-#version:python3.7
d1= dict(a=1,b=2,c=3,d=4)print(d1)print(d1[‘a‘]) #不存在则抛出 KeyError 异常
print(d1.get(‘b‘))print(d1.get(‘e‘)) #不存在返回None
print(d1.setdefault(‘d‘,‘e‘)) #返回key对应的value值
print(d1.setdefault(‘e‘,5)) #key值不存在,创建kv对
print(d1)
执行结果:
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: 4}1
2None4
5{‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: 4, ‘e‘: 5}
3、字典的增加和修改
[key] = value
将key对应的值修改为value
key不存在添加新的kv对
update([other]) → None
使用另一个字典的kv对更新本字典
key不存在,就添加
key存在,覆盖已经存在的key对应的值
就地修改
#-*- coding:utf-8 -*-#version:python3.7
d1= dict(a=1,b=2,c=3,d=4)print(d1)
d1[‘d‘] = 3 #将key对应的值修改为value
print(d1)
d1[‘e‘] = 4 #key不存在添加新的kv对
print(d1)
d1.update({‘b‘:3,‘e‘:1})print(d1)
执行结果:
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: 4}
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: 3}
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: 3, ‘e‘: 4}
{‘a‘: 1, ‘b‘: 3, ‘c‘: 3, ‘d‘: 3, ‘e‘: 1}
4、字典删除
pop(key[, default])
key存在,移除它,并返回它的value
key不存在,返回给定的default
default未设置,key不存在则抛出KeyError异常
popitem()
移除并返回一个任意的键值对
字典为empty,抛出KeyError异常
clear()
清空字典
#-*- coding:utf-8 -*-#version:python3.7
d1= dict(a=1,b=2,c=3,d=4)print(d1)
d1.pop(‘d‘)print(d1)print(d1.pop(‘e‘,None)) #不存在返回缺省值,可以判断key值是否存在
d1.popitem() #随机弹出
print(d1)
d1.clear()print(d1)
执行结果:
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3, ‘d‘: 4}
{‘a‘: 1, ‘b‘: 2, ‘c‘: 3}
None
{‘a‘: 1, ‘b‘: 2}
{}
del语句
#-*- coding:utf-8 -*-#version:python3.7
a=True
b= [2]
d= {‘a‘:1,‘b‘:b,‘c‘:[3,4]}print(d)del a #引用计数归零
del b[0] #删除成空列表
print(b)
c= b #引用计数加1
del d[‘c‘]print(d)
执行结果:
{‘a‘: 1, ‘b‘: [2], ‘c‘: [3, 4]}
[]
{‘a‘: 1, ‘b‘: []}
看着像删除了一个对象,本质上减少了一个对象的引用,del实际上删除的是名称,而不是对象
5、字典遍历
for ... in dict
遍历key
for k in d:
print(k)
for k in d.keys():
print(k)
#-*- coding:utf-8 -*-#version:python3.7
d= dict(((‘a‘,1),(‘b‘,2),(‘c‘,3)))for k ind:print(k)print(‘*‘ * 10)for k in d.keys(): #遍历key,建议使用d.keys()
print(k)
执行结果:
a
b
c**********a
b
c
遍历value
for k in d:
print(d[k])
for k in d.keys():
print(d.get(k))
for v in d.values():
print(v)
#-*- coding:utf-8 -*-#version:python3.7
d= dict(((‘a‘,1),(‘b‘,2),(‘c‘,3)))for k ind:print(d[k])print(‘*‘ * 10)for k ind.keys():print(d.get(k))print(‘*‘ * 10)for v ind.values():print(v)
执行结果:1
2
3
**********
1
2
3
**********
1
2
3
遍历item,即kv对
for item in d.items():
print(item)
for item in d.items():
print(item[0],item[1])
for k,v in d.items():
print(k,v)
for k,_ in d.items():
print(k)
for _,v in d.items():
print(v)
#-*- coding:utf-8 -*-#version:python3.7
d= dict(((‘a‘,1),(‘b‘,2),(‘c‘,3)))for item ind.items():print(item)print(‘*‘ * 10)for item ind.items():print(item[0],item[1])print(‘*‘ * 10)for k,v ind.items():print(k,v)
执行结果:
(‘a‘, 1)
(‘b‘, 2)
(‘c‘, 3)**********a1b2c3
**********a1b2c3
6、总结
Python3中,keys、values、 items方法返回一个类似一个生成器的可迭代对象,不会把函数的返回结果复制到内存中
返回Dictionary view对象,可以使用len()、iter()、in操作
字典的entry的动态的视图,字典变化,视图将反映出这些变化
keys返回一一个类set对象,也就是可以看做一个set集合
如果values都可以hash,那么items也可以看做是类set对象
Python2中,上面的方法会返回一 个新的列表,占据新的内存空间。所以Python2建议使用iterkeys、itervalues、iteritems版本, 返回一个迭代器,而不是返回一个copy
原文:https://www.cnblogs.com/zyybky/p/12638920.html