python cookbook 学习笔记 第一章 数据结构和算法(7)字典的运算

  • 字典的运算
  • 问题:
    • 怎样在数据字典中执行一些计算操作(比如求最大值,最小值,排序等)?
  • 解决方案:
    • 考虑下面的股票名和价格映射字典:
prices ={
    "ACME": 45.23,
    "AAPL": 612.78,
    "IMB": 205.55,
    "HPQ":37.2,
    "FB": 10.75
}
  • 为了对字典值进行运算,通常需要使用zip()函数先将键和值反过来。比如,下面是查找最小和最大 股票价格和对应的代码:
min_price = min(zip(prices.values(),prices.keys()))
print(min_price) # (10.75, 'FB')
max_price = max(zip(prices.values(),prices.keys()))
print(max_price) # (612.78, 'AAPL')
  • 类似,可以使用zip()和sorted()函数来排列字典数据:
prices_sorted = sorted(zip(prices.values(),prices.keys()))
print(prices_sorted)
  • 需要注意的是zip()函数创建的是只能访问一次的迭代器。

  • 讨论:如果在一个字典上执行普通的数学运算,会发现他们仅仅作用于键,而不是值。

print(min(prices))     # AAPL
print(max(prices))    # IMB
  • 如果像在字典的值集合上执行这些计算。可以使用字典的values()方法来解决问题:
print(min(prices.values()))  # 10.75
print(max(prices.values()))  # 612.78
  • 这个结果通常也不是想要的,可能还想知道对应的键的信息(比如,那种股票的价格是最低的)。 可以使用 min() 和 max() 函数中提供 key 函数参数来获取最小值火最大值对应的信息。 比如:
min_key = min(prices,key= lambda k: prices[k])
print(min_key)  # FB
max_key = max(prices, key= lambda k:prices[k])
print(max_key)  # AAPL
  • 如果要想得到最新值,又得进行一次查找操作。比如:
min_value = prices[min(prices,key= lambda k: prices[k])]
  • 前面的zip()函数方案通过将字典"反转"为(值,键)元组序列来解决了上述问题。当比较两个元 组的时候,值会先进行比较,然后才是键。这样的话,可以通过一条简单的语句实现字典上的求最 值和排序操作了。
  • 需要注意的是在计算操作中使用了(值,键)对。当多个实体拥有相同的值得时候,键会决定返回值 的结果。比如在执行 min() 和 max()操作的时候,如果恰巧最大或最小值有重复的,那么拥有 最小或最大键的实体会返回:
prices = {"AAA": 45.23,"zzz": 45.23}

min(zip(prices.values(),prices.keys()))  # (45.23, 'AAA')

max(zip(prices.values(),prices.keys()))  # (45.23, 'zzz')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值