# Python中dict详解

Python中dict详解

概述:
使用键-值(key-value)纯纯,具有极快的查找速度
注意;字典是无序的
key的特性:
1 字典中的key必须唯一
2 key必须是不可变得对象
3 字符串、整数等都是不可变得,可以作为key
4 list是可变的,不能作为key

用字典,学生姓名为key,学生成绩作为值
dict1 = {"tom":60,"lilei":70}

1.元素的访问

dict1 = {"tom":60,"lilei":70}
print(dict1["lilei"])				#获取:字典名[key]
#(输出)70

当元素在dict中不存在时,运行就会报错
print(dict1["sunck"])
#(输出)KeyError: 'sunck'  

此时,为了避免程序运行中被这种报错终止,我们常用下面这种方法:
print(dict1.get("sunck")) 			#没有 避免报错 返回None
#(输出)None

我们也可以对返回的None进行设置,简单比如;
if ret == None:
    print("没有这个元素")
else:
    print("有这个元素")

2.向dict中添加key和value
因为一个key 对因一个value,所以,多次对一个value赋值,其实就是修改值

dict1 = {"tom":60,"lilei":70}
dict1["hanmeimei"] =99
dict1["lilei"]=80
print(dict1)
#(输出){'tom': 60, 'lilei': 80, 'hanmeimei': 99}

3.(dict).pop()删除
dict1.pop(key)

dict1 = {"tom":60,"lilei":70}
dict1.pop("tom")
print(dict1)
#(输出){'lilei': 70}

4.dict的遍历
dict1.values() #查看dict中的values
dict1.keys() #查看dict中的keys

dict1 = {'tom': 60, 'lilei': 80, 'hanmeimei': 99}
for key in dict1:
    print(key,dict1[key])
#(输出)	tom 60
		lilei 80
		hanmeimei 99

print(dict1.values())				#查看dict中的values
#(输出)dict_values([60, 80, 99])

print(dict1.keys())					#查看dict中的keys
dict_keys(['tom', 'lilei', 'hanmeimei'])

for value in dict1.values():
    print(value)
#(输出)	60
		80
		99

5.(dict).items()
dict1.items()

dict1 = {'tom': 60, 'lilei': 80, 'hanmeimei': 99}
print(dict1.items())
#(输出)dict_items([('tom', 60), ('lilei', 80), ('hanmeimei', 99)])

for k, v in dict1.items():
    print(k,v)
#(输出)	tom 60
		lilei 80
		hanmeimei 99

for i, v2 in enumerate(dict1):
    print(i , v2)
#(输出)	0 tom
		1 lilei
		2 hanmeimei

6.(dict).update()更新字典

dict1 = {"a" : "apple", "b" : "banana"}
print(dict1)
#(输出){'a': 'apple', 'b': 'banana'}

dict2 = {"c" : "grape", "d" : "orange"}
dict1.update(dict2)
print(dict1)
#(输出){'a': 'apple', 'b': 'banana', 'c': 'grape', 'd': 'orange'}

7.(dict).clear() #将字典dict清空

dict1 = {"a" : "apple", "b" : "banana"}
dict1.clear()
print(dict1)
#(输出){}

8.(dict).fromkeys()
使用fromkeys() 函数用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值。

seq={"name","age","score"}
d=dict.fromkeys(seq,100)
print(d)
#(输出){'age': 100, 'name': 100, 'score': 100}

9.(dict).popitems()

seq={"name","age","score"}
d=dict.fromkeys(seq,200)
print(d)  
#输出:{‘age‘: 200, ‘name‘: 200, ‘score‘: 200}
d2=d.popitem()
print(d2) 
#输出:(‘age‘, 200)
print(d)  
#(输出):{‘name‘: 200, ‘score‘: 200}

**10.dict(dict1, dict2)合并两个字典
合并两个字典可以先把两个字典分成key-value对,再连接两个key-value对,生成新的字典。即 dict(dict1.items()+dict2.items()) 。不过效率有些低。
使用效率更高的 dict(dict1, **dict2) 连接两个字典。

dict1= {'a': 1, 'b': 2, 'c': 3}
dict2= {'d': 4, 'e': 5, 'f': 6}
print(dict(dict1, **dict2))
#输出:{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5, 'f': 6}

11.dict的拷贝
dict.copy()是一个浅拷贝,当遇到字典或者列表时,将不能完全拷贝。
深层拷贝字典建议使用copy模块的deepcopy()方法。
具体情况如下所示:

import copy

dict1 = {'a': [1, 2], 'b': 3}
dict2 = dict1
dict3 = dict1.copy()
dict4 = copy.deepcopy(dict1)

dict1['b'] = 'change'
dict1['a'].append('change')

print dict1 
#(输出): {'a': [1, 2, 'change'], 'b': 'change'}
print dict2 
#(输出): {'a': [1, 2, 'change'], 'b': 'change'}
print dict3 
#(输出): {'a': [1, 2, 'change'], 'b': 3}
print dict4  
#(输出): {'a': [1, 2], 'b': 3}

12.字典dict中cmp()方法
cmp() 函数用于比较两个字典元素。
注意:python3中已经删除了cmp()该函数。

dict1 = {'Name': 'Zara', 'Age': 7};
dict2 = {'Name': 'Mahnaz', 'Age': 27};
dict3 = {'Name': 'Abid', 'Age': 27};
dict4 = {'Name': 'Zara', 'Age': 7};
print "Return Value : %d" %  cmp (dict1, dict2)
#(输出):-1
print "Return Value : %d" %  cmp (dict2, dict3)
#(输出):1
print "Return Value : %d" %  cmp (dict1, dict4)
#(输出):0

13.dict中zip()函数
Python3中zip在不同版本的不同反应了python的一个演变:大部分返回list的函数不在返回list,而是返回一个支持遍历的对象,比如map、fiter之类的,基本的例子如下:

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
xyz = zip(x, y, z)
print(xyz)
#(输出)<zip object at 0x0000024927FC9908>    #返回一个支持遍历的对象

print (list(xyz))
#(输出)[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

所以常见于:

t1=["name","age","gender"]
t2=["milo",30,"male"]
#用for遍历一下
for each in zip(t1,t2):
    print(each)
#(输出)	('name', 'milo')
		('age', 30)
		('gender', 'male')

14.dict查找在段落出现字符数

str = "AAAA is a good man! AAAA is a niceman! AAAA is a good man! AAAA is a good man! AAAA is a good man! \
 AAAA is a hands man! AAAA is a boble man! AAAA is a good man!v is a cool man!"

#此处可以之前的count()函数 一步算出  比如w = "good"    print(str.count(w))  #(输出)5。
但也可以用字典进行:
w = "good"
d = {}
l = str.split(" ") #空格切割字符串
for v in l:        #循环处理历表中的每个元素
    c = d.get(v)
    if c== None:
        d[v] = 1       #以元素当做key区提取数据
    else:            #如果没有提取到,则以该元素作为key,1作为value存进字典
        d[v] += 1      #如果提取到,将对应的key 的value 修改 + 1
print(d[w])              #根据输入的字符串当做key再去字典取值
 #(输出)5

猜你喜欢

转载自blog.csdn.net/weixin_43097301/article/details/82941785