字典


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] = 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对应的值。
  • 删除元素:
    • 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(),清空字典。


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。


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   作者:闻骏