zoukankan      html  css  js  c++  java
  • Python 字典操作

    ## 一个键映射多个值,将元素对转换为 d = {'a': [1,2,3,4], 'b': [5,6,7,8]}

      # 普通方法

    1 pairs = [('a', 1),('b', 5),('a', 4),('a', 3),('b', 8),('b', 6),('a', 2),('b', 7),]
    2 d = {}
    3 for k, v in pairs:
    4     if k not in d:  # 若key不存在,则手动创建
    5         d[k] = []
    6     d[k].append(v)
    7 
    8 print(d)
    9 # {'a': [1, 4, 3, 2], 'b': [5, 8, 6, 7]}

      

      # 使用defaultdict

    1 from collections import defaultdict
    2 
    3 pairs = [('a', 1),('b', 5),('a', 4),('a', 3),('b', 8),('b', 6),('a', 2),('b', 7),]
    4 d = defaultdict(list)  # 参数可以是列表list,也可以是集合set
    5 for k, v in pairs:
    6     d[k].append(v)    # 根据defaultdict的参数类型使用append或者add,defaultdict会自动创建不存在的key
    7 
    8 print(d)
    9 # defaultdict(<class 'list'>, {'a': [1, 4, 3, 2], 'b': [5, 8, 6, 7]})

    ## 字典求最大值,最小值,排序

     1 scores = {
     2     "Stanley": 88,
     3     "Lily": 92,
     4     "Bob": 91,
     5     "Well": 80,
     6     "Peter": 92
     7 }
     8 lowest = min(scores, key=lambda s: s[1])
     9 print(lowest)
    10 # Well      # 只能得到一个键
    11 
    12 # 使用zip()函数反转键值对,sorted()函数自动比较第一个值,若第一个值相等则比较第二个值
    13 
    14 ordered_scores = sorted(zip(scores.values(), scores.keys()))
    15 lowest = min(ordered_scores)
    16 highest = max(ordered_scores)
    17 print(lowest)
    18 # (80, 'Well')   # 得到完整的值键对
    19 print(highest)
    20 # (92, 'Peter')  # 分数相同比较第二个值, P的ASCII编码中比L大,所以结果是(92, 'Peter')
    21 
    22 # 注意:zip()函数创建的只是一次性访问的迭代器,不可重复访问
    23 
    24 zipped_scores = zip(scores.values(), scores.keys())
    25 lowest = min(zipped_scores)
    26 highest = max(zipped_scores) # ValueError: max() arg is an empty sequence
    27 print(lowest)
    28 # (80, 'Well')

    ## 字典的异同比较

     1 a = {
     2     'x': 1,
     3     'y': 2,
     4     'z': 3
     5 }
     6 b = {
     7     'o': 2,
     8     'q': 4,
     9     'y': 2
    10 }
    11 
    12 print(a.keys() - b.keys()) # 使用减号,返回两个字典中不相同的部分
    13 # {'z', 'x'}
    14 print(a.keys() & b.keys()) # 使用&返回两个字典的交集
    15 # {'y'}
    16 print(a.items() - b.items())
    17 # {('z', 3), ('x', 1)}
    18 print(a.items() & b.items())
    19 # {('y', 2)}
    20 #
    21 # 不能使用 a.values() 和 b.values() 进行比较

    参考资料:

      Python Cookbook, 3rd edition, by David Beazley and Brian K. Jones (O’Reilly).

  • 相关阅读:
    Spark源码学习1.1——DAGScheduler.scala
    Spark随笔(三):straggler的产生原因
    Spark随笔(二):深入学习
    Spark随笔(一):Spark的综合认识
    Hadoop随笔(二):Hadoop V1到Hadoop V2的主要变化
    Hadoop随笔(一):工作流程的源码
    zookeeper 安装笔记 3.6.7
    OpenStack 与 大数据的融合
    三 概要模式 3) MR计数器计数 。无 reduce 计数
    五 数据组织模式 2) 分区模式 代码
  • 原文地址:https://www.cnblogs.com/hycstar/p/9330401.html
Copyright © 2011-2022 走看看