1. 什么是Dictionary(字典)
字典就是很多的数据,但是它有一个目录,可以通过目录中的一个简单值来找到与之相对应的详细信息。换句话说,目录就是内容的一个特殊表示,即目录中的每一个字段,都会在内容中有与之对应的详细信息。也就是说,目录中的每一个信息都是唯一的,与目录中的其他信息互不冲突。
python中的Dictionary不只是用于存储字符串,还可以是任意数据类型,包括字符串和数组,对象,甚至其他的dictionary。dictionary的key可以是字符串和整数,也可以在一个dictionary中混用和匹配key的数据类型。
2. 定义dict
dic={"server":"apache","database":"master"}
每一个元素都是一个key-value对,整个元素用大括号括起来,可以通过key来引用其值,但不能通过值来获得key,所以
dic={"1":"a",2:"b",8:"aa"}
print dic[8]
3. 修改dict
在一个 dictionary中不能有重复的key,但我们可以给一个存在的 key赋值,覆盖原有的值。如,我要将Dictionary dic中“server”的值改为“weblogic”,
dic["server"] ="weblogic"
4.添加key-value
举个简单的例子:我要在Dictionary中添加user=’root’的键值对,
dic[“user”] = “root”。
5.Dictionary的常用方法
Dictionary中的常用方法: | |
---|---|
len(a) | 得到字典a中元素的个数 |
a[k] | 取得字典a中键K所对应的值 |
a[k] = v | 设定字典a中键k所对应的值成为v |
del a[k] | 使用 key从一个 dictionary中删除独立的元素。如,删除Dictionary dic中的user=’root’:del dic[“user”] |
a.clear() | 从一个 dictionary中清除所有元素。如,删除Dictionary dic中的所有元素:dic.clear() |
a.copy() | 得到字典副本 |
k in a | 字典中存在键k则为返回True,没有则返回False |
k not in a | 字典中不存在键k则为返回true,反之返回False |
a.has_key(k) | 判断字典a中是否含有键k |
a.items() | 得到字典a中的键—值对list |
a.keys() | 得到字典a中键的list |
a.update([b]) | 从b字典中更新a字典,如果键相同则更新,a中不存在则追加. |
a.fromkeys(seq[, value]) | 创建一个新的字典,其中的键来自sql,值来自value |
a.values() | 得到字典a中值的list |
a.get(k[, x]) | 从字典a中取出键为k的值,如果没有,则返回x |
a.setdefault(k[, x]) | 将键为k的值设为默认值x。如果字典a中存在k,则返回k的值,如果不存在,向字典中添加k-x键值对,并返回值x |
a.pop(k[, x]) | 取出字典a中键k的值,并将其从字典a中删除,如果字典a中没有键k,则返回值x |
a.popitem() | 取出字典a中键值对,并将其从字典a中删除 |
a.iteritems() | 返回字典a所有键-值对的迭代器。 |
a.iterkeys() | 返回字典a所有键的迭代器。 |
a.itervalues() | 返回字典a所有值的迭代器。 |
6. dict具体操作
6.1. 字典的遍历
dic={"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}
for k in dic:
print "dic[%s]=" %k,dic[k]
6.2.字典的items()
dic={"a" : "apple", "b" : "banana", "g" : "grape", "o" : "orange"}
print dic.items()
for (k,v) in dic.items():
print "dic[%s]=" %k,v
6.3.使用列表,字典作为字典的值
dict={"a" : ("apple",), "bo" : {"b" : "banana", "o" : "orange"}, "g" : ["grape","grapefruit"]}
print dict["a"] #('apple',)
print dict["a"][0] #apple
print dict["bo"] #{"b" : "banana", "o" : "orange"}
print dict["bo"]["o"]#orange
print dict["g"] #['grape', 'grapefruit']
print dict["g"][1] #grapefruit
6.4.输出key和value的列表
dict = {"a" : "apple", "b" : "banana", "c" : "grape", "d" : "orange"}
print dict.keys()
print dict.values()
print dict.items()
6.5.字典中元素的获取方法
#字典中元素的获取方法
dict = {"a" : "apple", "b" : "banana", "c" : "grape", "d" : "orange"}
print dict
print dict.get("c") #grape
print dict.get("e", "apple")#None
print dict.get("e") #None
#get()的等价语句
D = {"key1" : "value1", "key2" : "value2"}
if "key1" in D:
print D["key1"]
else:
print "None"
6.6.字典的更新
#字典的更新
dict = {"a" : "apple", "b" : "banana"}
print dict
dict2 = {"c" : "grape", "d" : "orange"}
dict.update(dict2)
print dict
#udpate()的等价语句
D = {"key1" : "value1", "key2" : "value2"}
E = {"key3" : "value3", "key4" : "value4"}
for k in E:
D[k] = E[k]
print D
6.7.调用sorted()排序
#调用sorted()排序
dict = {"a" : "apple", "b" : "grape", "c" : "orange", "d" : "banana"}
print dict
#按照key排序
print sorted(dict.items(),key=lambda d:d[0])
#按照value排序
print sorted(dict.items(),key=lambda d:d[1])
6.8.字典的浅拷贝
dict = {"a" : "apple", "b" : "grape"}
dict2 = {"c" : "orange", "d" : "banana"}
dict2 = dict.copy()
print dict2
6.9.字典的深拷贝
import copy
dict = {"a" : "apple", "b" : {"g" : "grape","o" : "orange"}}
dict2 = copy.deepcopy(dict)
dict3 = copy.copy(dict)
dict2["b"]["g"] = "orange"
print dict
dict3["b"]["g"] = "orange"
print dict
6.10 添加字典条目
dict = {"a" : "apple", "b" : {"g" : "grape","o" : "orange"}}
dict.setdefault("c",{})["h"]="hello"
# 添加条目c,如果c不存在就新建一个{},向c中添加{"h":"hello"}
7. 注意
- Dictionary中的key值是大小写敏感的。并且在同一个dictionary中不能有重复的key值。并且,Dictionary中没有元素顺序的概念。
- list:可以采用附属索引,从list的尾部开始向前计数。
直接用a[1:n]实现list的切片
直接append在队尾添加元素,在insert(pos,obj)在pos处加元素,extend连接list
直接用index查找元素在list中的位置,没找到时会引发异常,可以用in判断是否存在
直接用remove删除元素,可以直接用pop得到并删除以后一个元素。
list可以用*运算符,当做重复器。[1,2]*3=[1,2,1,2,1,2]
将list中1的每个元素应用一个函数,映射为另一个list:
li=[1,2,3,4]
lili=[elem*2 for elem in li]
print lili #[2,4,6,8]
- tuple:不可变的list,tuple可以作为dictionary的key,tuple可以用于一次赋值多个值。
- python可以支持格式化字符串,将一个值插于%s的位置
params="hello"
print "string template contains %s" %(params)params="hello"
p="qy"
print "string template contains %s %s" %(params,p)
%d表示整数,%f表示浮点数,%.2f表示2位小数,%+.2f表示打印正负
- “:”.join(list) #表示用:将list里的元素连接
params = ["hello","qy","welcome","to" ,"here"]
a=":".join(params)
print a
# hello:qy:welcome:to:here
- string.split(“;”)是将字符串根据;分割
a="hello wicle i am peter"
b=a.split(" ") #用空格作为分割
print b