【Python】python字典与集合类型用法举例

字典python语言中唯一的映射类型,用花括号{}表示,一个字典条目就是一个键值对,一个键对应一个值,是一对一的关系。一个字典对象是可变的,它是一个容器类型,能存储任意个数的python对象,其中也包括其它容器类型。方法keys()返回字典的键列表,values()返回字典的值列表,items()返回字典的键值对列表。字典中的值没有任何限制,它们可以是任意python对象,但字典中的键是有类型限制的,每个键只能对应一个值,且键必须是可哈系的,所有不可变类型都是可哈希的,不可变集合frozenset的元素可作为字典的键,但可变集合set就不行了,很少有可变对象是可哈希的,不过一个实现了__hash__()特殊方法的类是可以的。创建字典可以使用花括号赋值给一个变量,或者使用工厂方法dict(),或者使用内建方法fromkeys()。访问字典有多种方法,如上面提到的三个方法等一些内建方法,还支持迭代器访问字典的键,需要注意的是使用方括号[]更新字典内容时如果这个键不存在就会增加这个键值对。删除字典或字典中的内容可以使用内建方法或者del语句。字典支持赋值、比较等标准类型操作符,方括号[]访问,in、not in检查某个键是否存在于字典中,标准类型函数如获取类型的type()、返回字符串表示形式的str()、用于比较的cmp()等,以及创建字典的工厂函数dict()、返回长度的len()、返回哈希值的hash()。


以下是字典类型的常用方法——

clear():删除字典中所有元素。

copy():返回字典(浅复制)的一个副本。

fromkeys(seq,val=None):创建并返回一个新字典,以seq中的元素做该字典的键,val做该字典中所有键对应的初始值。

get(key,default=None):返回字典中的键key对应的值value,如果字典中不存在此键,则返回default的值。

has_key(key):如果键key在字典中存在,返回True,否则返回Falsepython2.2后这个方法几乎已废弃不用了,通常用in来替代。

items():返回一个包含字典中键值对元组的列表。

keys():返回一个包含字典中键的列表。

iter():方法iteritems()iterkeys()itervalues()与它们对应的非迭代方法一样,不同的是它们返回一个迭代子,而不是一个列表。

pop(key[,default]):和方法get()类似,如果字典中key键存在,删除并返回dict[key],如果key键不存在,且没有给出default的值,引发KeyError异常。

setdefault(key,default=None):和方法get()相似,如果字典中不存在key键,由dict[key]=default为它赋值。

update(dict2):将字典dict2的键值对添加到当前字典中。

values():返回一个包含字典中所有值的列表。


下面以一个模拟用户登录的数据系统为例介绍字典的用法。

#!/usr/bin/env python 

db = {} 

def newuser(): 
	prompt = 'register: ' 
	while True: 
		name = raw_input(prompt) 
		if db.has_key(name): 
			prompt = 'name taken, try another: ' 
			continue 
		else: 
			break 
	pwd = raw_input('passwd: ') 
	db[name] = pwd 
 
def olduser(): 
	name = raw_input('login: ') 
	pwd = raw_input('passwd: ') 
	passwd = db.get(name) 
	if passwd == pwd: 
		print 'login success:', name 
	else: 
		print 'login failure' 

def showmenu(): 
	prompt = """ 
(R)eister 
(L)ogin 
(Q)uit 
Enter choice: """ 

	done = False 
	while not done: 
		chosen = False 
		while not chosen: 
			try: 
				choice = raw_input(prompt).strip()[0].lower() 
			except (EOFError, KeyboardInterrupt): 
				choice = 'q' 
			print '\nYour choice: [%s]' %choice 
			if choice not in 'rlq': 
				print 'invalid option, try again' 
			else: 
				chosen = True 
				if choice == 'r': 
					newuser() 
				elif choice == 'l': 
					olduser() 
				else: 
					done = True 

if __name__ == '__main__': 
	showmenu()

脚本第三行初始化一个空的db字典,第9行通过has_key()判断新注册的用户名(字典的key)是否存在,第15行通过方括号[]给一个用户名添加密码(即给一个键添加值),第20行通过get()获取用户名对应的密码(即与字典的key对应的value)。第38行的strip()是字符串处理函数,这个地方用来删除字符串首尾的空白符。


集合对象是一组无序排列的可哈希的值,集合成员可以做字典中的键,和其它容器类型一样,集合支持in和not in操作符检查成员,常见的比较操作符和交集&、并集|、相对补集-、对称差分^等操作符,有len()内建函数得到集合的大小,用for循环迭代集合的成员,但是因为集合本身是无序的,所以不可以为集合创建索引或执行切片操作,也没有键可用来获取集合中元素的值。集合有两种不同的类型,可变集合set和不可变集合frozenset,有对应的工厂函数set()和frozenset()。


集合支持如下方法——

s.issubset(t) 判断s是否是t的子集
s.issuperset(t) 判断s是否是t的超集
s.union(t) 返回s和t的并集
s.intersection(t) 返回s和t的交集
s.difference(t) 返回一个新集合,该集合是s的成员,但不是t的成员。
s.symmetric_difference(t) 返回一个集合,该集合是s或t的成员,但不是s和t共有的成员。
s.copy() 浅拷贝

python字典与集合类型用法举例
s.update(t) 用t中的元素修改s
s.intersection_update(t)
s.difference_update(t)
s.symmetric_difference_update(t)
s.add(obj) 在s中添加obj
s.remove(obj) 删除s中的obj,obj不属于s时引发KeyError。
s.discard(obj) 删除s中的obj
s.pop() 删除s中的任意一个对象
s.clear() 删除s中的所有元素



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值