码迷,mamicode.com
首页 > 编程语言 > 详细

Python字典小结

时间:2018-10-19 23:47:37      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:简单   创建   rap   hash   default   port   ons   知识   取出   

??字典(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), 欢迎大家关注哦~~

Python字典小结

标签:简单   创建   rap   hash   default   port   ons   知识   取出   

原文地址:https://www.cnblogs.com/jclian91/p/9819651.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!