6.3 字典方法
6.3.1 clear方法
用于清空字典中的所有元素。
dict = {“a”:1,”b”:2}
dict.clear();
print(dict)
运行结果:{}
# names1,names2都引用的是字典的地址,不会清空names2的元素。
names1 = {"Bill":20, "Mike":30, "John":40}
names2 = names1
print(names2)
names1 = {}
print(names2)
# 清空了字典的内容,字典的引用地址并没有变
names1 = {"Bill":20, "Mike":30, "John":40}
names2 = names1
names1.clear()
print(names2)
6.3.2 copy方法与deepcopy函数
copy方法用于复制一个字典,该方法返回复制后的新字典。
dict = {“a”:30,”b”:”hello”,”c”:[1,2,3,4]}
newdict = dict.copy()
copy方法复制的字典只是浅复制,只复制第1层的字典数据。至于第2层以及以下的所有层,原字典和新字典都指向同一个值,也就是说,不管事修改原字典中的这些元素,还是新字典中的这些元素,原字典和新字典中对应的元素都会同时改变。如果只修改第1层,则不会相互影响。deepcopy函数可以对序列进行深层次的复制。
#导入copy模块中的deepcopy函数
from copy import deepcopy
dict = {“a”:30,”b”:”hello”,”c”:[1,2,3,4]}
#newDict是经过深层次复制的字典,与dict中的元素完全脱离
newDict = deepcopy(dict)
示例
#定义一个字典
persons1= {"Name":"Bill", "age":30, "fullName":["Bill", "Gates"]}
#对persons1进行浅层复制
persons2 = persons1.copy()
print("persons1",persons1)
print("persons2",persons2)
print("-------浅层复制---------")
print("-------修改第一层元素---------")
persons2['age'] = 54
print("persons1",persons1)
print("persons2",persons2)
print("-------修改第二层元素---------")
persons2["fullName"][1] = "Clinton"
print("persons1",persons1)
print("persons2",persons2)
print("-------深层复制---------")
from copy import deepcopy
persons1= {"Name":"Bill", "age":30, "fullName":["Bill", "Gates"]}
persons2 = persons1.copy()
persons3 = deepcopy(persons1)
persons1["fullName"][1] = "Clinton"
print("persons1", persons1)
print("persons2", persons2)
print("persons3", persons3)
6.3.3 fromkeys方法
fromkeys方法用于根据key建立新的字典(该方法的返回值就是新的字典)。在新的字典中,所有的key都有相同的默认值。在默认情况下,fromkeys方法会为每一个key指定None为其默认值。不过可以使用fromkeys方法的第2个参数设置新的默认值。
#通过一个空字典创建一个新的字典,通过列表指定key
newDict1 = {}.fromkeys(['name', 'company','salary'])
print(newDict1)
#通过元组指定key
newDict2 = newDict1.fromkeys(('name', 'company','salary'))
print(newDict2)
#通过fromkeys的第二个参数指定key的默认值
newDict3 = newDict1.fromkeys(['name', 'company','salary'],'没有值')
print(newDict3)
可以看出,fromkeys方法的第1个参数用于指定新字典的key集合,可以使用列表或元组指定这些key。第2个参数指定新字典中key对应的默认值,该值得类型可以是字符串类型、数值类型、布尔类型。
6.3.4 get方法
get方法用于更宽松的方式从字典中获取key对应的value。当使用dict[key]形式从字典中获取value时,如果key在dict中不存在,那木程序会抛出异常。get方法在key不存在时,会返回None值。也可以通过get方法的第2个参数指定当key不存在时返回的值。
示例1:
dict = {“name”:”Bill”,”age”:30}
value = dict[“salary”]
执行上边代码会报错
示例2:
dict = {"help":"帮助", "bike":"自行车", "geek":"极客","China":"中国"}
while True:
word = input("请输入英文单词:")
if word == ":exit":
break;
value = dict.get(word)
if value == None:
print("{}在字典中不存在.".format(word))
else:
print("“{}”的含义是“{}”".format(word, value))
6.3.5 items方法和keys方法
items方法用于返回字典中所有的key-value对。获得的每一个key-value对用一个元组表示。items方法的返回值类型是一个字典视图的特殊类型(可以在for循环中迭代输出),修改了字典或items方法的返回值,修改的结果就会反映在另一方法上。keys方法用于返回字典中所有的key,返回值类型与items方法类似,可以用于迭代。
示例1:
dict = {"help":"帮助", "bike":"自行车", "geek":"极客","China":"中国"}
print(dict.items())
for key_value in dict.items():
print("key","=",key_value[0],"value","=",key_value[1])
print(("bike","自行车") in dict.items())
dict_items = dict.items()
dict["bike"] = "自行车; 摩托车; 电动自行车;"
print(dict_items)
print(dict.keys())
for key in dict.keys():
print(key)
6.3.6 pop方法和popitem方法
pop方法用于获取指定key的值,并从字典中弹出这个key-value对。popitem方法用于返回字典中最后一个key-value对,并弹出这个key-value对(这里所说的最后一个key-value对,也就是为字典添加key-value对时的顺序,最后一个添加就是最后一个元素),使用popitem方法非常方便,这样就不需要指定key了。
示例1:
dict = {'c':10,'a':40,'b':12,'x':44}
dict['1'] = 3
dict['5'] = 3
print(dict.pop('b'))
for i in range(len(dict)):
print(dict.popitem())
6.3.7 setdefault方法
setdefault方法用于设置key的默认值。第1个参数表示key,第2个参数表示默认值。如果key在字典中不存在,那么setdefault方法会向字典中添加这个key,并用第2个参数值作为key的值。该方法会返回这个默认值。如果没有指定默认值,就会返回None。如果字典中已经存在key这个值,setdefault方法不会修改key原来的值,而且该方法返回key原来的值。
#向字典中添加一个name,默认值是Bill
dict = {}
print(dict.setdefault("name", 'Bill'))
print(dict)
#已有name并不会改变
print(dict.setdefault("name", "Mike"))
print(dict)
#向字典中添加一个name,默认值是None
print(dict.setdefault("age"))
print(dict)
如果key在字典中不存在,setdefault(key,value)方法与dict[key]=value形式完全是一样的,区别就是当key在字典中存在的情况下。setdefault(key,value)并不会改变原来值,而dict[key]=value是会改变原来值的。
6.3.8 update方法
update方法可以用一个字典中的元素更新另外一个字典。该方法只有一个参数,表示用作更新数据的字典数据源。如dict1.update(dict2)可以用dict2中的元素更新dict1,如果key不存在就添加到dict1中,如果key已存在,就更新到dict1中。
示例1:
dict1 = {
'title':'欧瑞学院',
'website':'https://geekori.com',
'description':'从事在线IT课程研发和销售'
}
dict2 = {
'title':'欧瑞科技',
'products':['欧瑞学院','博客','读书频道','极客题库','OriUnity'],
'description':'从事在线IT课程研发和销售,工具软件研发'
}
dict1.update(dict2)
for item in dict1.items():
print("key = {key} value = {value}".format(key = item[0],value = item[1]))
6.3.9 values方法
values方法用于以迭代器形式返回字典中值的列表。与key方法不同的是,values方法返回的值列表可以有重复的,而keys方法返回的键值列表不会有重复的key。
示例1:
dict = {
"a":1,
"b":2,
"c":2,
"d":4,
"e":1
}
print(dict.values())
for value in dict.values():
print(value)
字典是一个非常重要的序列,主要用来根据key查询value。经常被用到需要快速查找定位,但数据量不是很大的场景中(如果数据量大就需要用数据库或分布式系统)。