字典
01.字典(dict)是一个可变的,无序的,key不重复的key-value键值对的数据集合。
- 字典的定义方法:
- 使用花括号定义,比如:
new_dict = {"name": "wenjun"}
。- 花括号中没有内容会定义一个空字典。
- 字典中的key不能重复,如定义多次key,则先定义的会被后定义的覆盖。
- 使用dict()函数定义,比如:
new_dict_01 = dict({"name": "wenjun", "age": 35}) new_dict_02 = dict(name="wenjun", age=35) new_dict_03 = dict([('name', 'wenjun'), ('age', 35)]) print(new_dict_01) print(new_dict_02) print(new_dict_03)
- dict(**kwargs),使用关键字参数定义字典;如果同时使用了二元可迭代对象,则必须写在参数的最后位置。
- dict(iterable, **kwargs),使用二元的可迭代对象定义字典,可以使用列表,元组或字典本身。
- dict(map, **kwargs),使用一个字典构建另一个字典。
- 使用dict的类方法,比如:
new_dict = dict.fromkeys(range(10), 10) print(new_dict
- dict.fromkeys(iterable, value),使用可迭代对象构建字典。
- 使用花括号定义,比如:
- 字典的key:
- 字典的key要求和set的元素要求一致。
- 字典的key必须是可哈希的元素,可以使用hash()测试。
02.字典的内置方法:
- 查询元素:
- dict[key],返回key对应的value值,比如:
new_dict = dict(name="wenjun", age=35) print(new_dict["name"])
- 当key不存在时,会抛出异常,不建议使用。
- get(key, [, default]),返回key对应的value值,比如:
new_dict = dict(name="wenjun", age=35) print(new_dict.get("name"))
- 当key不存在时,会返回缺省值(default),如果没有设置缺省值则返回None。
- setdefault(key, [,default]),返回key对应的value值,比如:
new_dict = dict(name="wenjun", age=35) print(new_dict.setdefault("job", "it")) print(new_dict)
- 当key存在时,直接返回value的值。
- 当key不存在时,会将key-value插入字典中;如果设置了缺省值则返回缺省值,如果未设置,则返回None。
- dict[key],返回key对应的value值,比如:
- 添加及修改元素:
- dict[key] = value,修改key对应的value,当key不存在时则添加key-value,比如:
new_dict = dict(name="wenjun", age=35) new_dict['age'] = 30 new_dict['job'] = 'it' print(new_dict)
- update([other]),使用另一个字典的key-value对更新字典,比如:
new_dict = dict(name="wenjun", age=35) new_dict_update = {"job": "it"} new_dict.update(company="dominos") new_dict.update(new_dict_update) new_dict.update({"location": "shanghai"}) print(new_dict)
- 如果key不存在,则添加key-value对;如果key存在,则覆盖已经存在的key对应的值。
- dict[key] = value,修改key对应的value,当key不存在时则添加key-value,比如:
- 删除元素:
- pop(key, [,defauly]),删除一个key,并返回它的value,比如:
new_dict = dict(name="wenjun", age=35) print(new_dict.pop("name")) print(new_dict.pop("job", "it"))
- 如果key存在,删除该key,并返回它的value。
- 如果key不存在,返回给定的缺省值;如果未设置缺省值,则返回KeyError异常。
- 删除元素不能在遍历过程中执行,需要将可迭代对象保存到一个数组中。
- popitem(),移除并返回一个任意的键值对(元组),如字典是空字典,则抛出KeyError异常,比如:
new_dict = dict(name="wenjun", age=35) print(new_dict.popitem())
- clear(),清空字典。
- pop(key, [,defauly]),删除一个key,并返回它的value,比如:
03.字典的遍历:
- 遍历key,for key in dict.keys(),比如:
new_dict = dict(name="wenjun", age=35, job="it")
for key in new_dict.keys():
print(key)
- dict.keys()会返回一个可迭代的对象。
- 使用in和not in dict.keys()可以快速判断一个元素是否是字典的key。
- 遍历value,for value in dict.values(),比如:
new_dict = dict(name="wenjun", age=35, job="it")
for value in new_dict.values():
print(value)
- 遍历key-value对,for key, value in dict.items(),比如:
new_dict = dict(name="wenjun", age=35, job="it")
for key, value in new_dict.items():
print(key, value)
- 字典遍历的总结:
- python3中,keys,values和items方法返回一个类似生成器的可迭代对象,不会把函数的返回结果复制到内存中。
- dictionary view对象,可以使用len(),iter(),in()操作等。
- dictionary是字典的动态视图,字典变化,视图将反应出这些变化。
- keys返回一个类set对象;如果values都可以hash,那么items也可以看做是类set对象。
- python2中,keys,values和items方法返回一个新的列表,占据新的内存空间。
- python2建议使用iterkeys,itervalues,iteritems,返回一个迭代器,而不是一个copy。
- python3中,keys,values和items方法返回一个类似生成器的可迭代对象,不会把函数的返回结果复制到内存中。
04.缺省字典:
- 缺省字典的表达式为:
collections.defaultdict([default_factory[,...]])
- 缺省字典也是字典,它具有字典的一切的功能。
- 缺省字典中,当字典的key不存在时,会调用default_factory(工厂函数),因此非常灵活。
- 当key不存在时,相当于执行了dict[‘key’] = default_factory()。
- 缺省字典的示例:
from collections import defaultdict
new_dict = defaultdict(list)
for item in 'abcde':
for key in range(3):
new_dict[item].append(key)
print(new_dict)
05.有序字典:
- 有序字典的表达式为:
collections.OrderedDict()
- 有序字典也是字典,它具有字典的一切功能。
- 当遍历有序字典时,元素会依照它插入时候的顺序输出。
- python3.6之后默认就是有序字典。
- 有序字典的示例:
from collections import OrderedDict
new_dict = OrderedDict()
new_dict["name"] = "wenjun"
new_dict["age"] = 35
new_dict["job"] = "it"
new_dict["company"] = "dominos"
for i in range(5):
new_list = []
for key, value in new_dict.items():
new_list.append(key)
print(new_list)
字典解析式
01.字典解析式:
- 字典解析式指使用特定语句返回一个新的字典,其格式为:
{返回值 for 元素 in 可迭代对象 if 条件}
- 字典解析式的示例:
result = {x: x+1 for x in range(10)}
print(result)
- key必须是可hash的对象。
文档更新时间: 2020-07-29 20:04 作者:闻骏