python 基础之字典

字典

创建和使用字典

字典由多个键与其对应的值构成的对组成。

    phonebook={"Alice":"10086","Bob","10010"}

名字是键,电话号码是值。每个电话号码和值之间用冒号“:”隔开。每个项之间用“,”隔开。整个字典用的大括号括起来“{}”。

dict 函数

可以用dict函数,通过其他映射(比如其他字典)或者(键,值)这样的序列对建立字典。

list=[("name","Alice"),("age",21)]
d=dict(list)
print(d)

dict函数通过关键字参数来创建字典

d=dict(name="Alice",age=21)
print(d)

基本字典操作

  • len(d) 返回d中项(键-值对)的数量
  • d[k] 返回关联到键k上的值
  • d[k]=v 将值v关联到键k上
  • del d[k] 删除键为k的项
  • k in d 检查d中是否含有键为k的项

字典方法

clear
clear方法清除字典中所有的项。这是一个原地操作,无返回值(也可以说返回值是None)。
d={}
d["name"]="Alice"
d["age"]=21
print(d)
d.clear()
print(d)
returned_value=d.clear()
print(returned_value)
copy
copy方法返回一个具有相同键-值对的新字典(此方法实现的是浅拷贝(shallow copy))
x={"username":"admin","skill":["shoot","fire"]}
y=x.copy()

y["username"]="Alice"
y["skill"].remove("fire")

print(y)
print("-"*30)
print(x)

观察结果可以看出,在副本中替换值的时候,原始字典并不受影响。但是,倘若修改某个值(原地修改,而非替换),那么同样的值也会存储到原始地点中。这就是浅拷贝的特点。

解决办法是使用深拷贝(deep copy)。

from copy import deepcopy      #导入copy包中的deepcopy模块 
x={"username":"admin","skill":["shoot","fire"]}
y=x.copy()
dy=deepcopy(x)
y["username"]="Alice"
y["skill"].remove("fire")
print(y)
print("-"*30)
print(x)
print("-"*30)
print(dy)

关于深拷贝于浅拷贝的区别日后再议。

get
get方法是一个访问字典项的方法。如果试图访问字典中不存在的项时会报错但是用get就不会
d={}
print d["name"]
items和iteritems
  • items方法将所有的字典以列表的方式返回,这些列表的每一项都来自于(键,值)。但是返回时并没有特殊的顺序。
    *iteritems方法的作用基本一致,但是会返回一个迭代器对象而不是列表。
keys和iterkeys
keys方法将字典中的键以列表形式返回,而iterkeys返回针对键的迭代器。
popitem
popitem类似于list.pop,后者会弹出列表的左后一个元素。但是popitem弹出的是随机的项,原因是字典没有顺序的概念,但是仍可以用这个方法一个一个移除并处理项。
update
update方法是用一个字典项更新另外一个字典,提供的字典中的项会被添加到旧的字典中去,如果有相同的键则会被覆盖。
d={
    "title":"python",
    "size":"20",
    "value":"23"
}

x={"size":"28"}
d.update(x)
print(d)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值