美文网首页
python中collections的数据结构

python中collections的数据结构

作者: ___大鱼___ | 来源:发表于2019-06-12 10:56 被阅读0次
    __all__ = ['Counter', 'deque', 'defaultdict', 'namedtuple', 'OrderedDict', 'ChainMap']
    

    namedtuple

    # coding: utf-8
    from collections import namedtuple
    
    # 创建一个简洁的User类   []里面的参数代表 __init__初始化的参数
    User = namedtuple('User', ['name', 'age', 'hometown'])
    # user = User(name='李四', age=23, hometown='中国')
    user_tuple = ('李四', 23, '中国')
    user = User._make(user_tuple)   # 参数为iterable对象
    user_info_dict = user._asdict()
    print(user.name)
    print(user.age)
    print(user.hometown)
    print(user_info_dict)
    name, age, *other = user  # 支持拆包
    print(name, age, *other)
    

    defaultdict

    # coding: utf-8
    from collections import defaultdict
    
    # 判断一个元素在字典中出现的次数
    user_dict = {
    
    }
    users = ['fish', 'fish1', 'fish2', 'fish1', 'fish2', 'fish1', 'fish2', 'fish']
    
    for user in users:
        print(user)
        user_dict.setdefault(user, 0)  # 如果key不存在 则设置key  默认值为0
        user_dict[user] += 1
    
    print(user_dict)
    
    
    # 使用defaultdict
    
    # 判断一个元素在字典中出现的次数   defaultdict传递的参数是可调用对象的名称
    user_dict = defaultdict(int)   # int 0  list [] dict {}
    users = ['fish', 'fish1', 'fish2', 'fish1', 'fish2', 'fish1', 'fish2', 'fish']
    
    for user in users:
    
        user_dict[user] += 1  # 如果值不存在默认为0
    
    print(user_dict)
    
    
    # 使用函数调用传递默认值
    def get_default_dict():
        return {
            'name': '大鱼',
            'age': 18
        }
    
    
    user_dict = defaultdict(get_default_dict)   # int 0  list [] dict {}
    users = ['fish', 'fish1', 'fish2', 'fish1', 'fish2', 'fish1', 'fish2', 'fish']
    
    for user in users:
    
        user_dict[user]['group'] = '测试'  # 如果值不存在默认为0
    
    print(user_dict)
    

    deque

    # 双端队列  指可以在一个可迭代对象左右两侧添加元素
    from collections import deque
    
    user_list = deque(['张三', '李四', '王五', '赵六'], maxlen=4)
    user_list.appendleft('大鱼')  # 从列表左侧添加
    # deque(['大鱼', '张三', '李四', '王五'], maxlen=4)  如果超过最大长度则自动舍弃第一位  PS:'大鱼'
    print(user_list)
    
    user_list.popleft()  # 从左侧删除 deque(['张三', '李四', '王五'], maxlen=4)
    print(user_list)
    

    Counter

    from collections import Counter
    user_list = ['fish', 'fish1', 'fish2', 'fish1', 'fish2', 'fish1', 'fish2', 'fish']
    user_count = Counter(user_list)  # 统计每个元素出现的次数
    print(user_count)
    
    # top  n的问题   解决方案  堆
    user_count_1 = user_count.most_common(1)  # 筛选出出现次数最多的一个元素
    print(user_count_1)
    

    OrderedDict

    # OrderedDict 使我们添加元素的顺序是有序的  dict是无序的  如果是python3默认是排序的
    from collections import OrderedDict
    
    
    user_dict = OrderedDict()
    user_dict['fish'] = 10
    user_dict['fish1'] = 10
    user_dict['fish12'] = 10
    user_dict['2'] = 101
    print(user_dict)
    
    print(user_dict.popitem())  # 删除末尾的一个item   并将删除的key, value返回
    
    print(user_dict)
    
    
    user_dict.move_to_end('fish1')  # 移动某一个元素到最后
    print(user_dict)
    

    ChainMap

    from collections import ChainMap
    
    user_dict1 = {'fish': 1, 'fish2': 2}
    user_dict2 = {'fish2': 4, 'fish3': 5}
    
    map_dict = ChainMap(user_dict1, user_dict2)  # 合并多个字典为一个字典
    # ChainMap({'fish': 1, 'fish2': 2}, {'fish2': 4, 'fish3': 5})
    print(map_dict)
    
    # 打印结果重复key没有被删除 但是遍历的时候就没有相同的key
    for key, value in map_dict.items():
        print(key, value)
    
    
    map_dict1 = map_dict.new_child({'1': 2}) # 添加一个新的合并值
    print(map_dict1)
    
    print(map_dict.maps)  # 把ChainMap对象转化为一个列表操作
    
    

    相关文章

      网友评论

          本文标题:python中collections的数据结构

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