在嵌套字典中添加不同级别的值

罗密欧

我有一个散列值表。这是它的样子

hash_of_errors =
    {
      'i0': 
         {
            200: 
                 {
                   0: 12,
                   1: 23
                 },
            300: 
                 {
                   0: 4,
                   1: 3
                 }
            },
        'i1': 
         {
            100: 
                 {
                   0: 2,
                   1: 23
                 },
            300: 
                 {
                   0: 4,
                   1: 3
                 }
            }
    }

所以这是一个散列

  • 第一级:单位名称 i0、i1、i2 等
  • 第二级:计数:200、300、400 等。
  • 第三级:级别:0、1 等。
  • 和值是错误数。

我想要做的是创建一个二维数组,第一个索引是每个单位,第二个索引是每个计数的错误总数(0,1 级所有错误的总和)。在这种情况下,我会得到这个。

[[0, 35, 7], #i0 unit: 37 (12+23) for count 200, 7 for 300 and 0s for 100
 [24, 0, 7]] #i1 unit: 24 for count 100, 7 for 300 and 0s for 200

我需要打印的第二个二维数组/列表的第一个索引是每个级别(跨所有 i0、i1),第二个索引是每个计数的错误总数

[[2, 12, 8] #0 level: at count 100 we have 2, at 300 we have 8(4+4)
 [23, 23, 7]] #1 level: at count of 100 we have 23, at 300 we have 7(4+3)

我如何在 python 中做到这一点?

MSeifert

你基本上可以通过一些理解来完成所有这些。第一个是:

>>> units = ['i0', 'i1']
>>> counts = [100, 200, 300]
>>> levels = [0, 1]

>>> [[sum(hash_of_errors[unit].get(count, {}).values()) for count in counts] for unit in units]
[[0, 35, 7], [25, 0, 7]]

第二个有点复杂,因为您需要遍历所有这些:

>>> [[sum(hash_of_errors[unit].get(count, {}).get(level, 0) for unit in units) for count in counts] for level in levels]
[[2, 12, 8], [23, 23, 6]]

请注意,您也可以使用手动迭代而不是理解。他们不会是单行的,但也许更好理解。

例如:

# To translate name to position
units = {'i0': 0, 'i1': 1}
counts = {100: 0, 200: 1, 300: 2}
levels = {0: 0, 1: 1}

res = [[0, 0, 0], [0, 0, 0]]  # basic result, we will modify these values as we go along
for unit, unitdict in hash_of_errors.items():
    for count, countdict in unitdict.items():
        for level, errorcount in countdict.items():
            res[units[unit]][counts[count]] += errorcount
>>> res
[[0, 35, 7], [25, 0, 7]]

或者在第二种情况下:

res = [[0, 0, 0], [0, 0, 0]]
for unit, unitdict in hash_of_errors.items():
    for count, countdict in unitdict.items():
        for level, errorcount in countdict.items():
            res[levels[level]][counts[count]] += errorcount
>>> res
[[2, 12, 8], [23, 23, 6]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Django REST Framework中处理不同级别的嵌套

使用python从具有不同级别的嵌套列表和字典的json中提取数据

如何从不同级别的嵌套字典中提取和修改列表

Django-处理多个不同级别的嵌套模型

如何在R中添加不同级别的列并获得其频率

不同日志文件中不同级别的日志

Serilog 中不同级别的不同日志文件

Powershell在一个选择对象中获取不同级别的节点值

在MongoDb中获取不同级别的数组字段

argparse中不同级别的帮助详细程度

在gcc中启用“不同级别的间接”警告/错误

有没有一种通用的方法来替换具有不同程度嵌套级别的嵌套字典中的值?

使用不同级别的接口

访问函数不同级别的变量

检索不同级别的 placeIds

不同级别的方法访问

不同级别的熊猫计数

使用不同级别的位置过滤器更新嵌套对象-MongoDb更新

如何解开嵌套在不同级别的多个Maybes?

从2个级别的嵌套字典中过滤内部键

不同级别的聚合,我需要在 sql server 中按类型级别获取总和

如何为XML文档中不同级别的元素标识不同的xpath?

如何在 Swagger 中创建包含不同级别的不同对象的 API 定义?

如何使用TSQL查找不同级别的三个列值?

从 base64 解密不同级别的相同密钥的值

使用D3.js从同一个附加实例中的嵌套对象的不同级别访问值

如何计算R中int向量中不同级别的数量?

如何在R中的复杂列表中组合不同级别的多个元素?

登录不同级别的不同文件