zoukankan      html  css  js  c++  java
  • 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('
    有序字典(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), 欢迎大家关注哦~~

  • 相关阅读:
    Windows平台下的读写锁
    进程的阻塞和挂起的区别
    事件函数SetEvent、PulseEvent与WaitForSingleObject详解
    多线程的那点儿事(之多线程调试)
    多线程同步内功心法——PV操作上(未完待续。。。)
    读者写者问题(有bug 后续更改)
    解决VS2010控制台程序运行结束不显示请按任意键继续
    Method has too many Body parameters openfeign
    Eclipse中Cannot nest src folder解决方法
    restTemplate重定向问题 &cookie问题
  • 原文地址:https://www.cnblogs.com/jclian91/p/9819651.html
Copyright © 2011-2022 走看看