经常用python,体会就是会用的就经常用,总是那么几个方法。其实很多方法有时候更方便,更直接可以达到目的,只是自己不清楚它的真实用法罢了。总是需要看看书,总结一下,才会有提高。
现将python字典的基本操作和方法总结如下,直接上代码亲测:
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 23 20:45:43 2017
@author: daliang
"""
print "#################### 字典创建 #################################"
print "# 直接创建字典"
phoneBook = {'liang':'S201402034','gou':'S201402031','yang':'S201402033'}
print phoneBook
print "# 利用dict函数通过其他映射或者键值对创建字典"
items = [('name','gou'),('age','27')]
d1 = dict(items)
print d1
items2 = [['name','daliang'],['age','26']]
d2= dict(items)
print d2
d3 = dict(name='daliang',age='26')
print d3
print "#################### 字典基本操作 #############################"
print "# 字典的键可以是任何不可变类型,比如整型,浮点型,字符串,元组 "
dictName = {'liang':'S201402034','gou':'S201402031','yang':'S201402033'}
print len(dictName)
print dictName['liang']
dictName['liang'] = 'modify it'
print dictName['liang']
del dictName['liang']
print dictName
if 'liang' in dictName:
print dictName['liang']
else:
print "not this key"
print "###################### 字典方法 ##########################"
print "# clear清除所有项"
dictName = {'liang':'S201402034','gou':'S201402031','yang':'S201402033'}
print dictName
dictName.clear()
print dictName
print "# copy 返回相同键值对的新字典,浅复制:新字典中的元素是老字典的引用"
print "# deepcopy 返回相同键值对的新字典,深复制:字典中的元素是新的对象,它不是成员方法,只是函数"
dictName = {'liang':'S201402034','gou':'S201402031','yang':['S201402033','S201402034']}
from copy import deepcopy
deepCopiedDict = deepcopy(dictName)
shallowCopiedDict = dictName.copy()
print shallowCopiedDict
print deepCopiedDict
shallowCopiedDict['yang'].remove('S201402034')
print shallowCopiedDict
print deepCopiedDict
print dictName
print "# fromkeys 使用指定的键建立新的字典,每一个键的默认值为none,也可以指定默认值"
dictName = {}.fromkeys(['name','age','gender'])
print dictName
dictName = {}.fromkeys(['name','age','gender'],'undefined')
print dictName
print "# get 通过键访问字典中的值,键不存在时,不会出错"
dictName = {'liang':'S201402034','gou':'S201402031','yang':['S201402033','S201402034']}
print dictName.get('liang')
print dictName.get('niu')
print dictName.get('niu','key not exist!')
print "# has_key 相当于 k in dict"
dictName = {'liang':'S201402034','gou':'S201402031','yang':['S201402033','S201402034']}
print dictName.has_key('liang')
print dictName.has_key('niu')
print "# items 以列表额形式返回字典,每一项都是键值对的形式的列表"
print "# iteritems 功能大致相同,返回迭代器对象,而不是列表"
dictName = {'liang':'S201402034','gou':'S201402031','yang':['S201402033','S201402034']}
print dictName.items()
print dictName.iteritems().next()
print list(dictName.iteritems())
print "#keys 以列表的形式返回键"
print "#iterkeys 返回键的迭代器对象"
dictName = {'liang':'S201402034','gou':'S201402031','yang':['S201402033','S201402034']}
print dictName.keys()
print dictName.iterkeys().next()
print list(dictName.iterkeys())
print "#value 以列表的形式返回值"
print "#itervalues 返回值的迭代器对象"
dictName = {'liang':'S201402034','gou':'S201402031','yang':['S201402033','S201402034']}
print dictName.values()
print dictName.itervalues().next()
print list(dictName.itervalues())
print "# pop 获取给定键的值,然后将键值对删除"
print "# popitem 弹出一个随机键值对,并删除"
dictName = {'liang':'S201402034','gou':'S201402031','yang':['S201402033','S201402034']}
print dictName.pop('liang')
print dictName.popitem()
print dictName
print "# setdefault 类似于get,获得给定键的值,如果不含有指定键,还可以设定键值"
dictName = {'liang':'S201402034','gou':'S201402031','yang':['S201402033','S201402034']}
print dictName.setdefault('liang','return or set')
print dictName.setdefault('niu','return or set')
print dictName
print "# update 利用一个字典更新另一个字典,没有的键值对会被添加,已存在的键的值会被覆盖"
dictName = {'liang':'S201402034','gou':'S201402031','yang':['S201402033','S201402034']}
newDict = {'niu':'S201402039','yang':'S201402038'}
print dictName.update(newDict)
print dictName
运行结果:
#################### 字典创建 #################################
# 直接创建字典
{'gou': 'S201402031', 'yang': 'S201402033', 'liang': 'S201402034'}
# 利用dict函数通过其他映射或者键值对创建字典
{'age': '27', 'name': 'gou'}
{'age': '27', 'name': 'gou'}
{'age': '26', 'name': 'daliang'}
#################### 字典基本操作 #############################
# 字典的键可以是任何不可变类型,比如整型,浮点型,字符串,元组
3
S201402034
modify it
{'gou': 'S201402031', 'yang': 'S201402033'}
not this key
###################### 字典方法 ##########################
# clear清除所有项
{'gou': 'S201402031', 'yang': 'S201402033', 'liang': 'S201402034'}
{}
# copy 返回相同键值对的新字典,浅复制:新字典中的元素是老字典的引用
# deepcopy 返回相同键值对的新字典,深复制:字典中的元素是新的对象,它不是成员方法,只是函数
{'gou': 'S201402031', 'yang': ['S201402033', 'S201402034'], 'liang': 'S201402034'}
{'gou': 'S201402031', 'yang': ['S201402033', 'S201402034'], 'liang': 'S201402034'}
{'gou': 'S201402031', 'yang': ['S201402033'], 'liang': 'S201402034'}
{'gou': 'S201402031', 'yang': ['S201402033', 'S201402034'], 'liang': 'S201402034'}
{'gou': 'S201402031', 'yang': ['S201402033'], 'liang': 'S201402034'}
# fromkeys 使用指定的键建立新的字典,每一个键的默认值为none,也可以指定默认值
{'gender': None, 'age': None, 'name': None}
{'gender': 'undefined', 'age': 'undefined', 'name': 'undefined'}
# get 通过键访问字典中的值,键不存在时,不会出错
S201402034
None
key not exist!
# has_key 相当于 k in dict
True
False
# items 以列表额形式返回字典,每一项都是键值对的形式的列表
# iteritems 功能大致相同,返回迭代器对象,而不是列表
[('gou', 'S201402031'), ('yang', ['S201402033', 'S201402034']), ('liang', 'S201402034')]
('gou', 'S201402031')
[('gou', 'S201402031'), ('yang', ['S201402033', 'S201402034']), ('liang', 'S201402034')]
#keys 以列表的形式返回键
#iterkeys 返回键的迭代器对象
['gou', 'yang', 'liang']
gou
['gou', 'yang', 'liang']
#value 以列表的形式返回值
#itervalues 返回值的迭代器对象
['S201402031', ['S201402033', 'S201402034'], 'S201402034']
S201402031
['S201402031', ['S201402033', 'S201402034'], 'S201402034']
# pop 获取给定键的值,然后将键值对删除
# popitem 弹出一个随机键值对,并删除
S201402034
('gou', 'S201402031')
{'yang': ['S201402033', 'S201402034']}
# setdefault 类似于get,获得给定键的值,如果不含有指定键,还可以设定键值
S201402034
return or set
{'gou': 'S201402031', 'yang': ['S201402033', 'S201402034'], 'liang': 'S201402034', 'niu': 'return or set'}
# update 利用一个字典更新另一个字典,没有的键值对会被添加,已存在的键的值会被覆盖
None
{'gou': 'S201402031', 'yang': 'S201402038', 'liang': 'S201402034', 'niu': 'S201402039'}