美文网首页
【2017-09-04】数据结构与算法(三)

【2017-09-04】数据结构与算法(三)

作者: 小蜗牛的成长 | 来源:发表于2017-09-04 19:29 被阅读0次

    字典的运算

    • 字典的简单数学运算
      问题:怎样在数据字典中执行一些计算操作 (比如求最小值、最大值、排序等等)
         在数据字典中进行min() 、max() 、sorted()等数学运算,仅仅作用于键上,而不是值,如果需要使用值,可借助zip()等方法来协助计算,需要注意的是:zip()返回的是一个迭代器,具有时效性
      实例:下列为股票名和价格映射字典,查找最小和最大股票价格和股票值的代码
    prices = {
    'ACME': 45.23,
    'AAPL': 612.78,
    'IBM': 205.55,
    'HPQ': 37.20,
    'FB': 10.75
            }
    
    prices_min=min(zip(prices.values(),prices.keys()))
    prices_max=max(zip(prices.values(),prices.keys()))
    prices_sorted = sorted(zip(prices.values(), prices.keys()))
    prices_sorted_1 = sorted(prices.items(), key=lambda item: item[1])
    prices_sorted_re = sorted(zip(prices.values(), prices.keys()),reverse=True)#从大到小
    #结果
    >>prices_min=(10.75, 'FB')
    >>prices_max=(612.78, 'AAPL')
    >>prices_sorted=[(10.75, 'FB'), (37.2, 'HPQ'), (45.23, 'ACME'), (205.55, 'IBM'), (612.78, 'AAPL')]
    >>prices_sorted_1=[('FB', 10.75), ('HPQ', 37.2), ('ACME', 45.23), ('IBM', 205.55), ('AAPL', 612.78)]
    >>prices_sorted_re=[(612.78, 'AAPL'), (205.55, 'IBM'), (45.23, 'ACME'), (37.2, 'HPQ'), (10.75, 'FB')]
    

    其中,sorted(iterable,key,reverse)方法,iterable表示可以迭代的对象,例如可以是dict.items()、dict.keys()等,key是一个函数,用来选取参与比较的元素,reverse则是用来指定排序是倒序还是顺序,reverse=true则是倒序,reverse=false时则是顺序,默认时reverse=false。

    • 字典的集合运算
      问题:寻找2个字典的相同点,例如相同的键、相同的值等
      集合运算:运算<对应于真子集⊂,<=对应于子集⊆,对应内置方法:issubset() ; >对应于真包含⊃,>=对应于包含⊇,对应内置方法:issuperset() ; 交集 的运算符号是& ,对应内置方法:intersection();并集的运算符号是|,对应内置方法:union() 等等
    #实例:过滤字典自定的关键字:过滤掉z、w关键字
    a = {
    'x' : 1,
    'y' : 2,
    'z' : 3
    }
    b= {
    'w' : 10,
    'x' : 11,
    'y' : 2
    }
    c={key:a[key] for key in a.keys()-{"z","w"}}
    print(c)
    #结果
    >>{'y': 2, 'x': 1}
    
    • 从字典中提取子集
      字典推导表达式的应用
    b= {
    'w' : 10,
    'x' : 11,
    'y' : 2
    }
    over={key:value for key,value in b.items() if value>5}
    over1=dict((key,value) for key,value in b.items() if value>5)#性能更好
    print(over)
    print(over1)
    #结果
    >>{'w': 10, 'x': 11}
    >>{'w': 10, 'x': 11}
    

    推导式,又称为解析式,可以从一个数据序列构造一个新的数据序列的结构体。python中,主要有:
    - 列表推导式(list)
    - 字典推倒时(dict)
    - 集合推倒时(set)

    #列表推倒时,使用[]:求30以内,能被3整除的数
    multiples = [i for i in range(30) if i % 3 is 0]
    print(multiples)
    #结果
    >>[0, 3, 6, 9, 12, 15, 18, 21, 24, 27]
    
    #集合推倒时,使用{}:对列表中每个值进行指数(幂)计算
    squared = {x**2 for x in [1, 1, 2]}
    print(squared)
    #结果
    >>{1, 4}
    
    #生成生成器,使用():求30以内,能被3整除的数
    multiples = (i for i in range(30) if i % 3 is 0)
    print(multiples)
    #结果
    >><generator object <genexpr> at 0x007F1630>
    
    

    相关文章

      网友评论

          本文标题:【2017-09-04】数据结构与算法(三)

          本文链接:https://www.haomeiwen.com/subject/rtnejxtx.html