Python字典小结

  字典(dict)结构是Python中常用的数据结构,笔者结合自己的实际使用经验,对字典方面的相关知识做个小结,希望能对读者一些启发~

创建字典

  常见的字典创建方法就是先建立一个空字典,然后逐一添加键(key)和值(value),比如创建字典person={'name':'Tome', 'age':22, 'city':'Shanghai, 'ID': '073569'},可以使用以下代码:

person = {} person['name'] = 'Tom' person['age'] = 22 person['city'] = 'Shanghai' person['ID'] = '073569' print(person)

输出结果为:

{'name': 'Tom', 'age': 22, 'city': 'Shanghai', 'ID': '073569'}

这样的创建方式简单原始,代码不够简洁优雅。我们用zip函数,来简单快捷地创建这个字典:

attrs = ['name', 'age', 'city', 'ID'] values = ['Tom', 22, 'Shanghai', '073569'] person = dict(zip(attrs, values)) print(person)

输出结果与原先代码一致。

遍历字典

  在实际应用中,我们常常需要遍历字典,实现的方法可参考以下代码:

attrs = ['name', 'age', 'city', 'ID'] values = ['Tom', 22, 'Shanghai', '073569'] person = dict(zip(attrs, values)) for key, value in person.items(): print('Key:%-6s, Value:%s'%(key, value))

输出结果为:

Key:name , Value:Tom Key:age , Value:22 Key:city , Value:Shanghai Key:ID , Value:073569 对调键值对

  在实际应用中,有时候我们需要查找字典中某个值(value)对应的键(key),遍历字典是一种选择,对调键值对是另一种选择。对调键值对的实现代码如下:

attrs = ['name', 'age', 'city', 'ID'] values = ['Tom', 22, 'Shanghai', '073569'] person = dict(zip(attrs, values)) print('对调前:') print(person) Person = {v:k for k,v in person.items()} print('对调后:') print(Person)

输出结果为:

对调前: {'name': 'Tom', 'age': 22, 'city': 'Shanghai', 'ID': '073569'} 对调后: {'Tom': 'name', 22: 'age', 'Shanghai': 'city', '073569': 'ID'} 有序字典OrderedDict

  Python中的字典是无序的,其取出来的键是无序的,因为它是按照hash来储存的。有时候,我们需要字典的条目(items)或键(keys)是有序储存的,这时候可以使用collections模块中的OrderedDict,它是一种有序的字典结构。
  示例代码如下(Python版本为3.5.2):

from collections import OrderedDict d = {} d['Tom']='A' d['Jack']='B' d['Leo']='C' d['Alex']='D' print('无序字典(dict):') for k,v in d.items(): print(k,v) d1 = OrderedDict() d1['Tom']='A' d1['Jack']='B' d1['Leo']='C' d1['Alex']='D' print('\n有序字典(OrderedDict):') for k,v in d1.items(): print(k,v)

输出的结果为:

无序字典(dict): Leo C Jack B Tom A Alex D 有序字典(OrderedDict): Tom A Jack B Leo C Alex D 默认字典collections.defaultdict

  collections.defaultdict是Python内建dict类的一个子类,第一个参数为default_factory属性提供初始值,默认为None。它覆盖一个方法并添加一个可写实例变量。它的其他功能与dict相同,但会为一个不存在的键提供默认值,从而避免KeyError异常。
  我们以统计列表中单词的词频为例,展示collections.defaultdict的优势。
  一般情形下,我们统计列表中的单词词频代码为:

words = ['sun', 'moon', 'star', 'star',\ 'star', 'moon', 'sun', 'star'] freq_dict = {} for word in words: if word not in freq_dict.keys(): freq_dict[word] = 1 else: freq_dict[word] += 1 for key, val in freq_dict.items(): print(key, val)

输出结果如下:

sun 2 moon 2 star 4

  使用collections.defaultdict,代码可以优化:

from collections import defaultdict words = ['sun', 'moon', 'star', 'star',\ 'star', 'moon', 'sun', 'star'] freq_dict = defaultdict(int) for word in words: freq_dict[word] += 1 for key, val in freq_dict.items(): print(key, val)

其它默认初始值可以为set,list,dict等。

注意:本人现已开通微信公众号: Python爬虫与算法(微信号为:easy_web_scrape), 欢迎大家关注哦~~

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzzpds.html