Python 字典的基本操作

创建和使用字典

phone = {"王林":151515151,"刘涛":15151515,"蔡明":151515151585};

print phone["王林"];

输出的结果为:151515151

字典是由多个键及其对应的值构成的键值对组成(我们把键值对成为项)。空字典可以直接用 {} 直接来定义。字典中的键是唯一的。

dict函数

items = [("name","wanglin"),("age",23)];
d = dict(items);
print d;

输出的结果为:{‘age’: 23, ‘name’: ‘wanglin’}

通过dict函数把其他字典或者键值对建立字典。如果dict中的参数为空,则建立 {} 字典。

基本字典操作

len() 返回其中项的数量
d[K] 返回关联到键K的值
d[K] = V 把V的值关联到d[K]上
del d[K] 删除键值为d[K]的值
K in d 检查d中是否含有键为K的值。
下面是对上述方法的实现:

phoneNum = {"王琳":15151515,"刘涛":5151515,"蔡明":855522};

print "phoneNum的长度为:",len(phoneNum);

输出的结果为:phoneNum的长度为: 3

print phoneNum["王琳"];

输出的结果为:15151515

phoneNum["刘涛"] = 56565565656;
print phoneNum["刘涛"];

输出的结果为:56565565656

del phoneNum["蔡明"];
print "phoneNum的长度为:",len(phoneNum);

输出的结果为:phoneNum的长度为: 2

if "王琳" in phoneNum:
    print "匹配到值";
else:
    print "无法匹配";

输出结果为:匹配到值

##字典的格式化字符串

phoneNum = {"王健":1519206XXXX,"刘涛":1586301XXXX,"蔡冲":1835361XXXX};
print "王健的电话号码是 %(王健)s " % phoneNum

输出的结果为:王健的电话号码是 1519206XXXX

template = '<html><head><title>%(title)s</title></head><body><h1>%(title)s</h1><p>%(text)s</p></body></html>'

data = {"title":"我的首页","text":"欢迎来到我的主页!"}

print template % data

输出的结果为:<html><head><title>我的首页</title></head><body><h1>我的首页</h1><p>欢迎来到我的主页!</p></body></html>

字典方法

###1、clear
clear 方法清楚字典中所有的项。这个是原地操作(类似于list.sort),所以无返回值(或者说返回None)

data = {"title":"我的首页","text":"欢迎来到我的主页!"}
print data.clear()

输出的结果为:None

###2、copy
copy方法返回一个人具有相同键值对的新字典(这个方法的实现是浅复制) 那么是什么叫做浅复制?

x = {"title":"my page","text":["1","2","3"]}
y = x.copy()
print y
y["text"].remove("3")
print y
print x

 输出的结果为:
{'text': ['1', '2', '3'], 'title': 'my page'}
{'text': ['1', '2'], 'title': 'my page'}
{'text': ['1', '2'], 'title': 'my page'}

由此可见,当修改了副本中的某个值的时候(不是替换)原始的字典也会改变,因为同样的值也存储的原字典中,避免这种问题的出现就要使用深复制,复制其包含的所有的值,可以使用copy模块的deepcopy函数来完成操作。

from copy import deepcopy
d = {}
d["name"] = ["wangjian","wanglin"]
c = d.copy()
dc = deepcopy(d)
d["name"].append("liutao")
print "浅复制的结果为:",c
print "深复制的结果为:",dc

输出的结果为:浅复制的结果为: {'name': ['wangjian', 'wanglin', 'liutao']}
深复制的结果为: {'name': ['wangjian', 'wanglin']}

###3、fromkeys
fromkeys方法使用给定的键建立新的字典,每个键都对应一个默认的值None

print dict.fromkeys(["name","age"])

输出的结果为:{'age': None, 'name': None}

###4、get
get方法是个更宽松的访问字典项的方法,一般来说,如果试图访问字典中的不存在的项时会出错。

d = {}
print d.get("name")

输出的结果为:None
当使用get访问一个不存在的键时,没有任何异常,而得到了None值,还可以自定义默认值替换None

print d.get("age","N/A")

输出的结果为:N/A

people= {
    "wangjian":{
      "phone":"33334",
      "addr":"address"
    },
    "liutao":{
      "phone":"42342",
      "addr":"3453534"
    },
    "caiming":{
        "phone":"423423",
        "addr":"2423423432"
    }
}

labels = {
    "phone":"phone number",
    "addr":"address"
}

name = raw_input("请输入姓名:")

查找电话号码还是地址
request = raw_input("请输入p(phone)或者a(address)")

使用正确的键
key = request
if request == "p":key = "phone"
if request == "a":key = "addr"

使用get() 提取默认值
person = people.get(name,{})
label = labels.get(key,key)
result = person.get(key,"not available")

print "%s's %s is %s " %(name,label,result)

输出的结果为:
请输入姓名:wanglin
请输入p(phone)或者a(address)p
wanglin's phone number is not available

###5、has_key
has_key方法可以检查字典中是否含有特定的键值。表达式d.has_key(k)相当于表达式k in d. python3中不包含这个函数

d = {}
print d.has_key("name")

程序的运行结果为:False

###6、items和iteritems
items方法将字典中所有的项以列表的方式返回,列表中的每一项都表示为(键、值)对应的形式。但是项在返回时没有特定的顺序。

d = {"name":"wanglin","age":23,"sex":"man"}
print d.items()

程序运行输出的结果为:[('age', 23), ('name', 'wanglin'), ('sex', 'man')]

iteritems方法的作用大致相同,但是会返回一个迭代器对象而不是列表
print d.iteritems()
程序输出的结果为:<dictionary-itemiterator object at 0x000000000340FA48>
由此看见程序输出的东西,是一串我们看不懂的16进制编码 那么怎么才能转化成我们想要的东西呢?如下所示:
print list(d.iteritems())
通过list()我们可以得到我们想要的结果,结果如下所示:[('age', 23), ('name', 'wanglin'), ('sex', 'man')]

###7、keys和iterkeys
keys方法将字典中的键以列表的形式返回,而iterkeys则返回针对键的迭代器

print d.keys()
print list(d.iterkeys())
 程序的运行结果为:
 ['age', 'name', 'sex']
 ['age', 'name', 'sex']

###8、pop
pop方法用来获得对应于给定键的值,然后将这个键值对从字典中移除

d = {"x":1,"y":2}
d.pop("x");
print d

程序的运行结果为:{'y': 2}

###9、popitem
popitem方法类似于list.pop,后者弹出列表的最后一个元素,但是不同的是,popitem弹出随机的项,因为字典中没有"最后的元素"或者其他有关顺序的概念。若想一个接一个地移除并处理项,这个方法就非常有效。

d = {"x":1,"y":2,"m":3,"n":4}
d.popitem()
print d

程序的运行结果如下所示:{'x': 1, 'm': 3, 'n': 4}

###10、setdefault
setdefault方法在某种程度上类似于get方法,能够获得与给定键相关联的值,除此之外,setdefault还能在字典中不含有给定键的情况下设定相应的键值。

d = {}
d.setdefault("name","N/A")
print d
d["name"] = "wanglin"
d.setdefault("name","N/A")
print d

程序的运行结果为:
{'name': 'N/A'}
{'name': 'wanglin'}

由程序的运行结果可以看到,当键不存在的时候,setdefault返回默认的值并相应的更新字典。如果键存在,那么就返回与其对应的值,但是不改变字典,默认值是可选的。

###11、update
update方法可以利用一个字典项更新另外一个字典。

d = {"x":1,"y":2}
x = {"x":12}
d.update(x)
print d
print x

程序的运行结果为:{'y': 2, 'x': 12}

###12、values和itervalues
values方法以列表的形式返回字典中的值,与返回键的列表不同的是,返回值的列表可以包含重复的元素。

d = {}
d[1] = 1
d[2] = 2
d[3] = 3
d[4] = 1
print d.values()
print list(d.itervalues())

程序运行的结果为:
 [1, 2, 3, 1]
 [1, 2, 3, 1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值