Python dict
字典是另一种可变容器模型,且可存储任意类型对象.
字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中,键必须是唯一的,但值则不必.
字典值可以没有限制地取任何python对象,既可以是标准的对象,也可以是用户定义的,但键不行。
两个重要的点需要记住:
1) 不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
2) 键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行
d = {key1 : value1, key2 : value2 }
基本操作
d = dict(name='visaya', age=20)
d = dict(zip(['name', 'age'], ['visaya', 20]))
d1={1:"a",2:None,3:"b","x":[1,2,3]} {1: 'a', 2: None, 3: 'b', 'x': [1, 2, 3]} #当有相同的key,则取最后一个值 d2={"a":1,"a":2,"a":3} #键必须不可变,所以可以用数字,字符串或元组充当,所以用列表就不行 d3={1:"a","x":1,(1,2,"c"):23} {1: 'a', 'x': 1, (1, 2, 'c'): 23} d4={[1,2]:1} TypeError: unhashable type: 'list' {'a': 3} #select value d1[1] 'a' #嵌套 dd={1:{"name":"Tom"},2:"python","email":"***@gmail.com"} dd[1]["name"] 'Tom' #modify value d1[1]="a" d2["a"]=123 #delete value #delete all objects but keep dict itself d2.clear() #delete specific item del d1[2] #drop dict object d3=d2 del d3 #排序 dict1 = {"a" : "apple", "b" : "grape", "c" : "orange", "d" : "banana"} sorted(dict1.keys()) sorted(dict1.values()) #按照key排序 sorted(dict1.items(),key=lambda d:d[0]) #按照values排序 sorted(dict1.items(),key=lambda d:d[1])
函数
cmp(dict1, dict2)
如果两个字典的元素相同返回0,如果字典dict1大于字典dict2返回1,如果字典dict1小于字典dict2返回-1
d1={1:"a",2:"b"} d2={2:"a",3:"b"} d3={1:"a",2:"c"} d4={1:"a",2:"b",3:"c"} d5={1:"a",2:"b"} cmp(d1,d2) -1 cmp(d3,d1) 1 cmp(d1,d4) -1 cmp(d1,d5) 0
len(dict) return 字典的元素个数
len(d1)
2
str(dict) return 字符串(适于人阅读的形式,以可打印的字符串表示)
print "output is:\n%s" % str(d1) output is: {1: 'a', 2: 'b'}
type(dict) return 输入的变量类型
print "d1's data type is: %s" % type(d1) d1's data type is: <type 'dict'>
方法
dict.clear() 用于删除字典内所有元素
d5.clear()
d5
{}
dict.copy() return一个字典的浅复制
d1 {1: 'a', 2: 'b'} d5=d1.copy() d5 {1: 'a', 2: 'b'}
dict.fromkeys(seq[, value])) return字典,用于创建一个新字典,以序列seq中元素做字典的键,value为字典所有键对应的初始值
seq1=[1,2,3] seq2=(4,5,6) dict1={} dict1=dict1.fromkeys(seq1) dict1 {1: None, 2: None, 3: None} value1=["a","b","c"] dict1.fromkeys(seq1,value1) {1: ['a', 'b', 'c'], 2: ['a', 'b', 'c'], 3: ['a', 'b', 'c']} dict1.fromkeys(seq2,"a") {4: 'a', 5: 'a', 6: 'a'}
dict1.fromkeys(['a', 'b'], 1)
{'a': 1, 'b': 1}
dict.get(key, default=None) return 指定键的值value,如果值不在字典中返回默认值None
d1 {1: 'a', 2: 'b'} d1.get(1) 'a' #如果指定键的值不存在时,返回该默认值值 d1.get(3,"c") 'c'
#等价于
k=3
if k in d1.keys():
print d1[k]
else:
d1[k]="c"
print d1[k]
dict.has_key(key) return 如果键key在字典里返回true,否则返回false 用于判断键key是否存在于字典中,如果键在字典dict里返回true,否则返回false
d1.has_key(1) True d1.has_key(3) False
dict.items() return用于以列表返回可遍历的(键, 值) 元组数组
d1.items() [(1, 'a'), (2, 'b')]
dict.keys() return 一个字典所有的键key
d1.keys()
[1, 2]
dict.setdefault(key, default=None) return NUll 和get()方法类似, 如果键不已经存在于字典中,将会添加键并将值设为默认值
d1.setdefault(1,"c") 'a' d1.setdefault(3,"c") 'c'
dict.update(dict2) return NULL 用于把字典dict2的键/值对更新到dict里
d1={1:"a",2:"b"}
d2={2:"c",4:"d"}
d1.update(d2)
{1: 'a', 2: 'c', 4: 'd'}
#等价于
for k in d2.keys():
d1[k]=d2[k]
print d1
dict.values() return 字典中的所有值 以列表返回字典中的所有值
d1.values() ['a', 'a', 'h']
dict.pop() return 从列表中移除的元素对象
dd={1:{"name","Tom"},2:"python","email":"***@gmail.com"} dd.pop("email") '***@gmail.com' dd {1: {'name': 'Tom'}, 2: 'python'} dd.pop(2) 'python' dd {1: {'name': 'Tom'}}
dd={1:{"name","Tom"},2:"python","email":"***@gmail.com"} for key in dd: print key,dd[key] #与上面等价 for key in dd.keys(): print key,dd[key] for values in dd.values(): print values for k,v in dd.items(): print str(k)+":"+str(v)
dict1={"a":1,"b":2,"c":3} for k,v in dict1.items(): print k,v a 1 c 3 b 2 #用iter的形势比较节省内存 for k,v in dict1.iteritems(): print k,v a 1 c 3 b 2 for k in dict1.iterkeys(): print k a c b for v in dict1.itervalues(): print v 1 3 2
for (k,v) in zip(dict1.iterkeys(),dict1.itervalues()):
print k,v