Python-----字典篇

一、创建字典

dict={key1:value1,key2:value2},用这种格式来创建字典。键必须是唯一的,但值是不必的。值可以是任意类型,而键是不可变的。

dict1={'z':123,'h':456}
print(dict1)

{'z': 123, 'h': 456}	#输出
dict1=dict((('name','Tom'),('age',18)))#根据dict(mapping)方法变换而来
print(dict1)

{'name': 'Tom', 'age': 18}	#输出

在上述代码中,括号里是元组,当然括号里也可以是列表,只要能达到一 一对应的关系即可。
也可利用关键字的方法创建字典:

dict1=dict(name='Tom',age=19)
print(dict1)

{'name': 'Tom', 'age': 19}	#输出

注意: 关键字不需要加引号。

二、访问字典里的值

把相应的键放入到方括号中,如下:

dict1={'z':123,'h':456}
print("dict1['z']:",dict1['z'])

dict1['z']: 123		#输出

如果字典里没有要访问的键,会出现什么情况呢?

dict1={'z':123,'h':456}
print("dict1['y']:",dict1[y])

NameError: name 'y' is not defined	#输出

三、修改字典

  • 向字典中增加新的键值对
dict1={'z':123,'h':456}
dict1['y']=234
print(dict1)

{'z': 123, 'h': 456, 'y': 234}	#输出
  • 修改字典中已有的键值对
dict1={'z':123,'h':456}
dict1['h']=234
print(dict1)

{'z': 123, 'h': 234}	#输出
  • 删除字典的元素
    删除字典中的某一元素:
dict1={'z':123,'h':456}
del dict1['z']
print(dict1)

{'h': 456}	#输出

清空字典中所有元素:

dict1={'z':123,'h':456}
dict1.clear()
print(dict1)

{}	#输出

删除字典:

dict1={'z':123,'h':456}
del dict1

那么dict1这个字典就已经消失了。
清空字典与赋值给字典为空字典的区别:

#清空字典
dict1={'z':123,'h':456} 
dict2=dict1
dict1.clear()
print('dict1=',dict1)
print('dict2=',dict2)

#输出
dict1= {}
dict2= {}
dict1={'z':123,'h':456} 
dict2=dict1
dict1={}
print('dict1=',dict1)
print('dict2=',dict2)
#输出
dict1= {}
dict2= {'z': 123, 'h': 456}

dict1与dict2是指向同一个内存单元,清空dict1,那么内存单元就被清空,这是第一种情况。给dict1赋值{ },那么dict1就指向其他的内存单元,而dict2仍然指向原来的内存单元。

四、字典键的特性

  • 不允许同一个键在字典中出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。
dict1={'name':'Tom','age':19,'name':'lily'}
print(dict1)

#输出
{'name': 'lily', 'age': 19}
  • 键必须不可变,所以可以用数字,字符串或元组充当,而不能用列表。
dict1={['name']:'Tom','age':19}
print(dict1)

TypeError: unhashable type: 'list'	#输出

五、字典的方法

  • dict.fromkeys(s,v)
    s是键值,v是键值对应的值(可选参数)。v的默认参数是None。
dict1=dict.fromkeys((1,2,3))
print(dict1)

{1: None, 2: None, 3: None}	#输出
dict1=dict.fromkeys((1,2,3),'number')
print(dict1)

{1: 'number', 2: 'number', 3: 'number'}	#输出

程序自动将’number’赋值给三个键。
那么我们肯定想输入三个参数分别赋值给三个键,这样可行吗?

dict1=dict.fromkeys((1,2,3),('number','aaa','zzz'))
print(dict1)

#输出
{1: ('number', 'aaa', 'zzz'), 2: ('number', 'aaa', 'zzz'), 3: ('number', 'aaa', 'zzz')}

那么python是将后面的三个参数以元组的形式一起赋值给键。
如果我们想批量修改字典的值,会出现什么效果呢?

dict1={'name':'Tom','age':19,'address':'China'}
dict2=dict1.fromkeys(('name','age'),'number')
print(dict2)

{'name': 'number', 'age': 'number'}	#输出

那么就创建了一个新的字典,而不会修改字典的值。

  • dict.keys()
dict1=dict.fromkeys(range(4),'棒!')
for eachkey in dict1.keys():
	print(eachkey)
#输出
0
1
2
3
  • dict.values()
dict1=dict.fromkeys(range(4),'棒!')
for eachvalue in dict1.values():
	print(eachvalue)
#输出
棒!
棒!
棒!
棒!
  • dict.items()
dict1=dict.fromkeys(range(4),'棒!')
for eachitem in dict1.items():
	print(eachitem)
#输出
(0, '棒!')
(1, '棒!')
(2, '棒!')
(3, '棒!')
  • dict.get()
    当我们试图访问一个字典中不存在的数据,那么系统就会报错。接下来,我们来介绍一种访问字典中不存在数据但不报错的方法。
dict1=dict.fromkeys(range(4),'棒!')
print(dict1.get(4))

None	#输出

那么输出值为None,None也是一个对象。
如果你希望当找不到键值的时候,返回一个具体的值,那么get()方法也是可以的。

dict1=dict.fromkeys(range(4),'棒!')
print(dict1.get(4,"没有"))
print(dict1.get(3,"没有"))
#输出
没有
棒!

字典中没有你想索引的值时,就会打印 ”没有“,反之,仍然会打印键对应的值 ”棒!“。

  • in 与 not in
    如果我们不知道一个键是否在字典内,我们可以通过in与not in来验证。
dict1=dict.fromkeys(range(4),'棒!')
print(4 in dict1)

False	#输出
  • copy()
    copy()与赋值并不相同。
dict1={'z':123,'h':456} 
dict2=dict1
dict3=dict1.copy()
print(id(dict1))
print(id(dict2))
print(id(dict3))

#输出
610282047992
610282047992
610282048072

由此我们可以看到,被赋值的字典与原字典指向同一内存单元,而copy后的字典是新拷贝的内存单元。

  • pop()
dict1={'a':11,'b':12,'c':13}
dict1.pop('a')#指定删去某一键值对
print(dict1)

{'b': 12, 'c': 13}	#输出
  • popitem()
dict1={'a':11,'b':12,'c':13}
dict1.popitem()#随机删去字典中的某一键值对
print(dict1)

{'a': 11, 'b': 12}	#输出
  • setdefault()
dict1={'a':11,'b':12,'c':13}
dict1.setdefault('d')
dict1.setdefault('e',15)#向字典中插入数据,插入的位置是随机的
print(dict1)
#输出
{'a': 11, 'b': 12, 'c': 13, 'd': None, 'e': 15}
  • update()
dict1={'a':11,'b':12,'c':13}
dict2={'c':15}
dict1.update(dict2)#用dict2更新dict1
print(dict1)

{'a': 11, 'b': 12, 'c': 15}
发布了14 篇原创文章 · 获赞 0 · 访问量 291

猜你喜欢

转载自blog.csdn.net/lhyhaiyan/article/details/104454865