python如何实现多层级自动赋值字典

 更新时间:2023年08月12日 10:15:16   作者:小胖_@  
这篇文章主要介绍了python如何实现多层级自动赋值字典问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

python多层级自动赋值字典

dict 只能单层级赋值

item['20161101'] = 2

defaultdict 只能双层级赋值

item['20161101']["age"] = 2

使用方法:

import collections
bag = ['apple', 'orange', 'cherry', 'apple','apple', 'cherry', 'blueberry']
count = collections.defaultdict(int)
for fruit in bag:
    count[fruit] += 1
输出:
defaultdict(<class 'int'>, {'apple': 3, 'orange': 1, 'cherry': 2, 'blueberry': 1})

多层级自动赋值字典

item['20161101']["age"]["444"] = 2

实现多层级自动赋值 除了可以重载__getitem__魔术方法,也可以实现__missing__魔术方法

1.重载__getitem__魔术方法:

def __getitem__(self, item):
    try:
        return dict.__getitem__(self, item)
    except KeyError:
        value = self[item] = type(self)()
        return value

2.实现__missing__魔术方法:

def __missing__(self, key):
    value = self[key] = type(self)()
    return value

3.使用方法:

class multidict(dict):
def __getitem__(self, item):
    try:
        return dict.__getitem__(self, item)
    except KeyError:
        value = self[item] = type(self)()
        return value
item = multidict()
item['20161101']["age"] = 20
item['20161102']['num'] = 30
print(item)

python字典一键赋多值

方案一

(1) list作为dict的值,值允许重复,append添加值

key = 0
value = [1,5]
exp = dict()
exp.setdefault(key,[]).append(value) 
value = [2,5]
exp.setdefault(key,[]).append(value)
print(exp)

输出:

{0: [[1, 5], [2, 5]]}

(2)set作为dict的值,值不允许重复,add添加值

key = 0
value = 1
exp = dict()
exp.setdefault(key,set()).add(value) 
value = 2
exp.setdefault(key,set()).add(value)
print(exp)

输出:

{0: {1, 2}}

方案二

使用collections.defaultdict方法

(1)collections.defaultdict(list),值可以重复

import collections
key = 0
value = 1
exp = collections.defaultdict(list)
exp[key].append(value)
value = 1
exp[key].append(value)
print(exp)

输出:

defaultdict(<class 'list'>, {0: [1, 1]})

(2)collections.defaultdict(set),值不允许重复

import collections
key = 0
value = 1
exp = collections.defaultdict(set)
exp[key].add(value)
value = 1
exp[key].add(value)
value = 5
exp[key].add(value)
print(exp)

输出:

defaultdict(<class 'set'>, {0: {1, 5}}) 

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python学习笔记之装饰器

    Python学习笔记之装饰器

    这篇文章主要介绍了Python 装饰器的相关资料,文中讲解非常细致,代码帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-08-08
  • Python字典的基本用法实例分析【创建、增加、获取、修改、删除】

    Python字典的基本用法实例分析【创建、增加、获取、修改、删除】

    这篇文章主要介绍了Python字典的基本用法,结合具体实例形式分析了Python字典的创建、增加、获取、修改、删除等基本操作技巧与注意事项,需要的朋友可以参考下
    2019-03-03
  • Python获取请求头Header的常用方法

    Python获取请求头Header的常用方法

    在 Python 中,如果你使用的是 Flask 或 Django 等常见的 Web 框架来处理 HTTP 请求,可以通过这些框架提供的工具来获取请求头(Request Header),以下是两种常见框架的示例代码,需要的朋友可以参考下
    2025-06-06
  • 使用Python和OpenCV检测图像中的物体并将物体裁剪下来

    使用Python和OpenCV检测图像中的物体并将物体裁剪下来

    这篇文章主要介绍了使用Python和OpenCV检测图像中的物体并将物体裁剪下来,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-10-10
  • 关于使用OpenCsv导入大数据量报错的问题

    关于使用OpenCsv导入大数据量报错的问题

    这篇文章主要介绍了使用OpenCsv导入大数据量报错的问题 ,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-08-08
  • 使用Python保存网页上的图片或者保存页面为截图

    使用Python保存网页上的图片或者保存页面为截图

    这篇文章主要介绍了使用Python保存网页上的图片或者保存页面为截图的方法,保存网页图片主要用到urllib模块,即简单的爬虫原理,需要的朋友可以参考下
    2016-03-03
  • Python中的xmltodict模块详解

    Python中的xmltodict模块详解

    这篇文章主要介绍了Python中的xmltodict模块详解,xmltodict一般我们用 json、yaml 转换成 dict 可能多一些,xml 转到 dict 可能用得不多,不过,还是可以来看一看,需要的朋友可以参考下
    2023-07-07
  • 一文详解Python与 C++、C语言的区别及选择指南

    一文详解Python与 C++、C语言的区别及选择指南

    现在编程是很多人都比较关注的,越来越多的人都想要学习编程语言,主流的编程语言有python、C、Java等,这篇文章主要介绍了Python 与 C++、C 语言的区别及选择指南,需要的朋友可以参考下
    2025-10-10
  • 解决pytorch读取自制数据集出现过的问题

    解决pytorch读取自制数据集出现过的问题

    这篇文章主要介绍了解决pytorch读取自制数据集出现过的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • YOLOv5改进之添加SE注意力机制的详细过程

    YOLOv5改进之添加SE注意力机制的详细过程

    作为当前先进的深度学习目标检测算法YOLOv5,已经集合了大量的trick,但是还是有提高和改进的空间,针对具体应用场景下的检测难点,可以不同的改进方法,下面这篇文章主要给大家介绍了关于YOLOv5改进之添加SE注意力机制的相关资料,需要的朋友可以参考下
    2022-08-08

最新评论