【Python学习笔记】四、字典


字典是python中唯一内建的映射类型(mapping)

1.字典的创建

phonebook1={'Mike':1234,'John':9876}
phonebook2={} #直接定义一个空字典
dict函数

通过其他映射或键值对的序列来创建字典。

# ①通过dict函数将列表元素转换成字典(列表的每一个元素均包含两个值,是一个列表或是一个元组)
item=[["Bill","1234"],("Mike","5678")]
d=dict(item)
print(d)
> 运行结果: {'Bill': '1234', 'Mike': '5678'}

# ②dict函数通过关键字参数来创建字典
item1=dict(name="Bill",number='100',age=45)
print(item1)
> 运行结果: {'name': 'Bill', 'number': '100', 'age': 45}

# ③dict函数如果不指定任何参数,则返回一个空的字典
item2=dict()
print(item2)
> 运行结果: {}

2.字典的基本操作

len(dict) :返回字典dict中元素(键值对)的数量。
dict[key]=value:将值value关联到键key上。
del dict[key]:删除键为key的项。
key in dict:检查dict中是否包含有键为key的项。

键类型:字典的键可以是任意不可变类型。

dict={} #定义一个字典

#分别向字典dict中添加整数类型、字符串类型、元组类型的key
dict[20]="Bill"
dict["Mike"]={'age':30,'num':3000}
dict[(12,"Mike",True)]="hello"

print(dict)
#运行结果:{20: 'Bill', 'Mike': {'age': 30, 'num': 3000}, (12, 'Mike', True): 'hello'}

3.字典的格式化字符串

之前我们使用百分号(%)配合元组对字符串进行格式化,如下:

val1=(1,3,"hello")
str1="abc %d,xyz %d,%s world"
print(str1%val1)
#运行结果:abc 1,xyz 3,hello world

现在我们可以使用字典配合format_map方法对字符串进行格式化,如下:

val2={'H':'how','U':'you','W':'?'}
str2="{H} are {U}{W} {H} do {U} do{W}" #定义一个字符串模板,需要格式化的参数使用花括号{}括起来
print(str2.format_map(val2)) 
#运行结果:how are you? how do you do?

4.迭代遍历字典中的key和value

dict={'x':1,'y':2,'z':3}
for i in dict:
    print(i,dict[i],end=' ') #Output:x 1 y 2 z 3
for i,j in dict.items():
    print(i,j,end=' ') #Output:x 1 y 2 z 3

5.字典方法

①clear方法

用于清空字典中的所有元素。

dict={'x':1,'y':2}
dict.clear()
print(dict) #Output:{}
num1={'x':1,'y':2}
num2=num1 #此时num1 is num2
num1={} #num1重新指向一个空字典后,此时num1 is not num2,所以num1的改变对num2无影响
print(num1,num2) #Output:{} {'x': 1, 'y': 2}

num1={'x':1,'y':2}
num2=num1 #此时num1 is num2
num1.clear() #故num1清空了num2也随之清空了
print(num1,num2) #Output:{} {}
②get方法

用于更宽松的方式从字典中获取key对用的value。
当我们使用dict[key]从字典中获取对应的value时,如果key不存在则程序会抛出异常,而用get方法可以阻止在key不存在时抛出异常。

get方法的第2个参数指定当key不存在时的返回值,默认情况下无指定第2个参数时返回None。

dict={'a':1,'b':2}
print(dict.get('c',0))
#Output:0
③items方法和keys方法、values方法

items方法用于返回字典中所有的key-value对,每一对以一个元组表示。

dict={'a':1,'b':2,'c':3}

print(dict.items()) #Output: dict_items([('a', 1), ('b', 2), ('c', 3)])

print(('a',1) in dict.items()) #Output: True

for key_value in dict.items():
    print(key_value,key_value[0],key_value[1])
#Output:
('a', 1) a 1
('b', 2) b 2
('c', 3) c 3

keys方法用于的返回字典中所有的key。
values方法用于返回字典中所有的value。

dict={'a':1,'b':2,'c':3}
print(dict.keys()) #Output:dict_keys(['a', 'b', 'c'])
print(dict.values()) #Output:dict_values([1, 2, 3])

for key in dict.keys():
    print(key,end=" ")
#Output:a b c

for value in dict.values():
    print(value,end=" ")
#Output:1 2 3	
④pop方法和popitem方法

pop方法用于获取指定key的值,并从字典中弹出这个key-value对。
popitem方法用于返回字典中最后一个添加的key-value对并弹出。

dict={'a':1,'b':2,'c':3}
dict[5]=4
dict['1']=5
print(dict) #Output: {'a': 1, 'b': 2, 'c': 3, 5: 4, '1': 5}
print(dict.pop('b')) #Output:2

#弹出字典中所有的元素
for i in range(len(dict)):
    print(dict.popitem())
#Output:
('1', 5)
(5, 4)
('c', 3)
('a', 1)
print(dict) #Output:{}
⑤setdefault方法

setdefault方法用于设置key的默认值。
该方法有两个参数,第1个参数表示key,第2个参数表示key的默认值,若第2个参数未指定,则key的默认值为None。
若key在字典中不存在,则该方法会向字典中添加这个key;若key在字典中存在,则该方法返回key原有的值,而不会去修改。
该方法主要用于向字典中添加新的key-value对,以及获取原有key的值。

dict={}
print(dict.setdefault('a',2)) #Output: 2
print(dict) #Output: {'a': 2}
print(dict.setdefault('a',3)) #并没有改变a对应的值,Output: 2
print(dict.setdefault('b')) #Output: None
print(dict) #Output: {'a': 2, 'b': None}
⑥update方法

update方法可以用一个字典中的元素更新另外一个字典。

dict1={'a':1,'b':2,'c':3}
dict2={'a':6,'b':2,'d':7}
dict1.update(dict2) #用dict2中的元素更新dict1
print(dict1)
#Output: {'a': 6, 'b': 2, 'c': 3, 'd': 7}
⑦fromkeys方法

fromkeys方法用于根据key建立新的字典(该方法的返回值就是新的字典)
默认情况下fromkeys方法为每个key指定None为其默认值,我们可以使用第2个参数设置新的默认值。

newdict={}.fromkeys(['a','b','c']) #可通过列表指定key
print(newdict) #Output: {'a': None, 'b': None, 'c': None}

newdict2=newdict.fromkeys(('name','age'))  #也可通过元组指定key
print(newdict2) #Output: {'name': None, 'age': None}

newdict3=newdict2.fromkeys(('q','w','e'),0) #第2个参数为每个key指定默认值为0
print(newdict3) #Output: {'q': 0, 'w': 0, 'e': 0}
⑧copy方法和deepcopy函数

copy方法:
用于复制一个字典,返回复制后的字典。
copy方法复制的字典只是浅复制,也就是说只复制第1层的字典数据。至于第2层及以下的所有层,原字典和新字典都指向同一个值。即不管是对原字典还是新字典进行修改,原字典和新字典中对应的元素都会同时改变。

dict={'a':1,'b':2,'c':[1,2,3]}
newdict=dict.copy()
print(newdict) #Output: {'a': 1, 'b': 2, 'c': [1, 2, 3]}
newdict['a']=3
print(dict) #Output: {'a': 1, 'b': 2, 'c': [1, 2, 3]}
newdict['c'][0]=5
print(dict) #Output: {'a': 1, 'b': 2, 'c': [5, 2, 3]}

deepcopy函数:
copy模块的deepcopy函数可对序列进行深层复制,复制后的原字典和新字典是完全脱离的,任何一个进行修改都不会影响另一个。

from copy import deepcopy
dict={'a':1,'b':2,'c':[1,2,3]}
newdict=deepcopy(dict)
print(newdict) #Output: {'a': 1, 'b': 2, 'c': [1, 2, 3]}
newdict['c'][0]=5
print(dict) #Output: {'a': 1, 'b': 2, 'c': [1, 2, 3]}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值