6. 字典

字典是什么

字典(dict) 是一种key-value键值对的数据的集合,它是可变的、无序的、key去重的。

字典的定义(初始化)

#空字典
d1 = dict() 
d2 = {}
#非空字典
d3 = {'a':1}
d4 = {'a':1, 1:1, 2:None, 3:'abc', 4:[], (5,):56}
d5 = dict(a=1,b=2,c="abc")
#dict(mapping, **kwarg)
d6 = dict(d5, d=200, e=300) 
#dict(iterable, **kwarg) 二元解构的可迭代对象
d7 = dict([(1,100), (2,'abc')], d=200, e=300)) 
#dict.fromkeys(iterable,value)
d8 = dict.fromkeys(range(5))
d9 = dict.fromkeys("abcdefg", 0)

字典的key与hash

key的要求与set一致,set可以看作简化版dict。

只有可hash的元素才可以作为key,可以用hash() 测试。

字典的增删查改

通过key查找

d9[1]

通过get查找

d9.get(1,100) 

找不到返回缺省值,默认返回None ,如果有定义缺省值则返回缺省值。

通过setdefault设置

d9.setdefault("h",100)

如果找到则不设置缺省值,找不到添加到词典,默认使用None ,如果有定义缺省值则使用缺省值。

通过key赋值

d[key] = value

将key对应的值修改为value

key不存在则添加

通过update更新

dict.update(other)

返回None

key不存在就添加,存在的话就覆盖现有的值,就地修改

pop操作

dict.pop(key,[default])

key存在:移除并返回指定键值对

如果定义了default:key不存在,返回default。

如果未定义default:key不存在返回异常。

popitem操作

dict.popitem()

随机移除并返回任意键值对,dict为空时返回异常。

clear操作

dict.clear()

清空字典。

遍历操作

for k in d2:
    print(k)

for k in d2.keys():
    print(k)

for v in d2.values():
    print(v)

for item in d2.items():
    print(item)

for item in d2.items():
    print(item[0],item[1])

for k,v in d2.items():
    print(k,v)

for k,_ in d2.items():
    print(k)

字典遍历的总结

Python3中,keys values items 返回的都是一个类似生成器的可迭代对象,不会把函数的返回结果复制到内存中

  • 返回Dictionary view对象,可以使用len() iter() in操作

  • 字典的entry的动态视图,字典变化,视图将反映出这些变化。

  • keys返回一个类set对象,也就是可以看作一个set集合。

  • 如果values都可以hash,那么items也可以看作是类set对象。

Python2中,上面的方法会返回一个新的列表,占据新的内存空间。所以建议使用iterkeys, itervalues, iteritems版本,返回一个迭代器,而不是一个copy。

Python3中,遍历过程中不能增删kv对。如果要删除,需要构建一个可迭代对象保存keys()。

defaultdict与OrderedDict

OrderdDict 仅在3.6之前有效

参见C. 模块/collections

Last updated