day5 字典的基本操作

字典:

字典的基本概念:

  字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据。python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无序存储的,且key必须是可哈希的。可哈希表示key必须是不可变类型,如:数字、字符串、元组。

  字典(dictionary)是除列表意外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过索引存取

1增:setdefault

dict = {'name': 'wangjifei','age':27,'hometown':'xingtai'}
dict['job'] = 'IT'#有就覆盖,没有就添加
print(dict)#{'name': 'wangjifei', 'age': 27, 'hometown': 'xingtai', 'job': 'IT'}
#setdefault 在字典中添加键值对,如果只有键那对应的值是none,但是如果原字典中存在设置的键值对,则他不会更改或者覆盖。
dict.setdefault('hometown','xingtai')
print(dict)#{'name': 'wangjifei', 'age': 27, 'hometown': 'xingtai', 'job': 'IT'}
dict.setdefault('name','gaoliang')
print(dict)#{'name': 'wangjifei', 'age': 27, 'hometown': 'xingtai', 'job': 'IT'}

 2、删:pop,popitem,clear,del

dict = {'name': 'wangjifei','age':27,'hometown':'xingtai'}
s = dict.pop('age')#返回删除的value
s2 = dict.pop('hobby','没有返回no')#若删除的键不存在,可以返回添加的任何信息,没有信息就报错
print(dict)
print(s)
print(s2)
dict.clear()#清空列表
dict = {'name': 'wangjifei','age':27,'hometown':'xingtai'}
s1 = dict.popitem()# 随机删除字典中的某个键值对,将删除的键值对以元祖的形式返回
print(s1)#('hometown', 'xingtai')
print(dict)#{'name': 'wangjifei', 'age': 27}
del dict['name']#无返回值
del dict#删除整个字典

3、改:update

dict = {'name': 'wangjifei','age':27,'hometown':'xingtai'}
dic = {'name':'gaoliang','hobby':'girl'}

dict['name'] = 'gaoliang'#有则覆盖没有就添加
print(dict)#{'name': 'gaoliang', 'age': 27, 'hometown': 'xingtai'}
dic = {'name':'gaoliang','hobby':'girl'}
dict.update(dic)#两个字典的更新,将dic里面的所有键值对,覆盖添加到dict中,dic不变
print(dict)#{'name': 'gaoliang', 'age': 27, 'hometown': 'xingtai', 'hobby': 'girl'}
print(dic)#{'name': 'gaoliang', 'hobby': 'girl'}

4、查:get;for循环,dict.keys--dict.values--dict.items

dict = {'name': 'wangjifei','age':27,'hometown':'xingtai'}
print(dict['name'])#wangjifei#key值查找
print(dict.get('age'))#27  #内置函数查找,找到返回value。没有key就返回None
print(dict.get('hobby','没有此键'))#没有此键   #key在字典里就返回对应的value,没有就返回添加的内容,没有添加内容就返回None
dict = {'name': 'wangjifei','age':27,'hometown':'xingtai'}

print(dict.keys(),type(dict.keys()))
print(dict.values(),type(dict.values()))
print(dict.items(),type(dict.items()))

》》》

dict_keys(['name', 'age', 'hometown']) <class 'dict_keys'>
dict_values(['wangjifei', 27, 'xingtai']) <class 'dict_values'>
dict_items([('name', 'wangjifei'), ('age', 27), ('hometown', 'xingtai')]) <class 'dict_items'>

for循环遍历查找字典:

第一种:

dict = {'name': 'wangjifei','age':27,'hometown':'xingtai'}
for i,v in dict.items():
    print(i,v)

》》》

name wangjifei
age 27
hometown xingtai

第二种:

dict = {'name': 'wangjifei','age':27,'hometown':'xingtai'}
for i in dict:
    print(i,dict[i])

》》》

name wangjifei
age 27
hometown xingtai

分别赋值法:

a,b = 1,3
print('a',a)
print('b',b)
a,b
= b, a print('a',a) print('b',b)

》》》

a 1
b 3
a 3
b 1

 字典的copy(拷贝字典)

dict = {
   'id1': {"name": "alex", "hobby_list": ["抽烟", "喝酒", "烫头", "Massage"]},
    'id2': {"name": "wusir", "hobby_list": ["喊麦", "街舞"]}
}
dict1 = dict.copy()
print(dict)
print(dict1)

》》》

{'id1': {'name': 'alex', 'hobby_list': ['抽烟', '喝酒', '烫头', 'Massage']}, 'id2': {'name': 'wusir', 'hobby_list': ['喊麦', '街舞']}}
{'id1': {'name': 'alex', 'hobby_list': ['抽烟', '喝酒', '烫头', 'Massage']}, 'id2': {'name': 'wusir', 'hobby_list': ['喊麦', '街舞']}}

fromkeys(指定一个列表,把列表中的值作为字典的key,生成一个字典)

list = ['s','r','t','n','m']
dict2 = dict.fromkeys(list)
dict3 = dict.fromkeys(list,50)
print(dict2)
print(dict3)

》》》

{'s': None, 'r': None, 't': None, 'n': None, 'm': None}
{'s': 50, 'r': 50, 't': 50, 'n': 50, 'm': 50}

 注意:fromkeys的误区

fromkeys迭代添加字典键值对时,如果自定义的值是列表的话,其实开辟的是一个内存地址,也就是说,接下来要在其中一个key中添加元素,其他key中也会添加上,就会导致不想遇到的结果,看不懂就看例子吧

dict1 = dict.fromkeys('abcdef',[])#创建的字典自定义添加[]元素
print(dict1)
dict1['a'].append(555)#在字典中key是'a'中的列表里添加数字555,看结果
print(dict1)#结果意想不到吧

》》》

{'a': [], 'b': [], 'c': [], 'd': [], 'e': [], 'f': []}
{'a': [555], 'b': [555], 'c': [555], 'd': [555], 'e': [555], 'f': [555]}

原文地址:https://www.cnblogs.com/feige6/p/8985651.html