当前位置: 首页 > 知识库问答 >
问题:

字典中仅有的一对列表索引的和

罗昊明
2023-03-14

如果我有这种类型的字典:

a_dictionary = {"dog": [["white", 3, 5], ["black", 6,7], ["Brown", 23,1]],
                "cat": [["gray", 5, 6], ["brown", 4,9]],
                "bird": [["blue", 3,5], ["green", 1,2], ["yellow", 4,9]],
                "mouse": [["gray", 3,4]]
                }

我想从第一行的第3行开始,用6和23求和,在下一行的第5行用4求和,以此类推,这样在打印时我会得到:

dog [32, 13]
cat [9, 15]
bird [8, 16]
mouse [3,4]

我尝试用一个for循环对a_dictionary的范围按索引求和,但是我不能按键访问值,比如:

a_dictionary[key]

但如果我像这样a_dictionary

对于键,dictionary.items()中的值:

我无法通过索引访问它来汇总所需的值。

我很想知道如何实现这一点。谢谢

共有3个答案

李耀
2023-03-14

这个对我有用:

results = {}
sum_x = 0
sum_y = 0
for key,value in a_dictionary.items():
    for i in range(len(value)):
        sum_x += value[i][1]
        sum_y += value[i][2]
    results[key] = [sum_x,sum_y]
    sum_x = 0
    sum_y = 0

输出:

results
{'dog': [32, 13], 'cat': [9, 15], 'bird': [8, 16], 'mouse': [3, 4]}
曹骞仕
2023-03-14

您可以使用Python的列表理解功能创建和汇总每种颜色的索引元素的临时列表,如下所示:

for animal, colors in a_dictionary.items():
    print(
        animal,
        [
            sum([color[1] for color in colors]),
            sum([color[2] for color in colors]),
        ]
    )
令狐珂
2023-03-14

通常,在Python中,您不想使用索引来访问列表或其他可迭代对象中的值(当然这不能总是适用)。

通过巧妙地使用zip()map(),您可以求和适当的值:

a_dictionary = {
    "dog": [["white", 3, 5], ["black", 6, 7], ["Brown", 23, 1]],
    "cat": [["gray", 5, 6], ["brown", 4, 9]],
    "bird": [["blue", 3, 5], ["green", 1, 2], ["yellow", 4, 9]],
    "mouse": [["gray", 3, 4]],
}

for k, v in a_dictionary.items():
    print(k, list(map(sum, zip(*(t for _, *t in v)))))

打印:

dog [32, 13]
cat [9, 15]
bird [8, 16]
mouse [3, 4]

编辑:

>

  • 使用(t 表示 _,在 v 中为 *t),我将从列表中提取最后两个值(丢弃第一个字符串值)

    zip(*(t表示_,*t表示v))将每个子列表的最后两个值转换为([3,6,23],[5,7,1]),([5,4],[6,9]),…(转置操作)

    然后,我对步骤2中创建的每个子列表应用< code>sum()。使用< code>map()

    map()的结果存储到列表中

  •  类似资料:
    • 问题内容: 我有一个字典列表: 如何通过匹配name =’Tom’来有效地找到索引位置[0],[1]或[2]? 如果这是一维列表,则可以执行list.index(),但是我不确定如何通过搜索列表中dict的值来进行操作。 问题答案: 如果需要从名称重复获取,则应按名称对它们进行索引(使用字典),这样 get 操作的时间为O(1)。一个想法:

    • 问题内容: 我正在尝试在字典列表中获取具有最大值的字典的索引,如下所示: 使用以下代码,我可以采用最大大小: 现在如何获取其索引?有没有简单的方法? 测试: 我只是想我可以做到这一点: 这个对吗? 问题答案: 告诉如何计算索引序列的最大值: 这将返回键最高的索引: 如果您一直想要该词典,则可以使用: 并同时获取索引 和 字典,可以在这里使用: 更多演示: 该函数依次传递给输入序列中的每个元素,并将

    • 问题内容: 假设我有这个: 并通过搜索“ Pam”作为名称,我想检索相关的字典: 如何实现呢? 问题答案: 你可以使用生成器表达式: 如果你需要处理不存在的商品,则可以按照用户Matt的 建议进行操作,并使用稍有不同的API提供默认值:

    • 问题内容: 我只想在给定列表中创建 一行 字典。字典的键将是索引,值将是列表的元素。像这样: 输出: 关于我为什么要 一条 线,我没有任何具体要求。我只是在探索python,想知道是否有可能。 问题答案: 将产生 返回一个枚举对象。 sequence 必须是序列, 迭代器 或其他支持迭代的对象。所返回的迭代器的方法返回,其中包含一个计数(从 start开始 ,默认为0)以及从对 序列进行 迭代获得

    • 问题内容: 如何使用Python-redis在Redis中保留针对某个键的字典列表。以下是我要针对的数据结构: 想要添加到会话列表中以及添加新会话并检索它们。如何使用Python-redis做到这一点? 问题答案: 使用pickle或json序列化字典。使用redis列表将它们存储为字符串。使用类似访问这些列表的键。如果需要获取所有会话密钥的列表,则可能需要维护一组密钥字符串。

    • 问题内容: 问题 我正在以以下方式创建一个空列表作为值的字典。 字典看起来像这样。 当我将一个值附加到一个列表时,此示例将值附加到所有列表。 问题 我的问题分为两部分。首先,为什么会这样?第二,我该怎么办?也就是说,如何将一个值仅附加到一个列表中? 我想象在创建字典时,我使所有列表都指向同一个对象。但是我不明白怎么回事,因为当我输入而不是在字典创建中,然后添加值而不是附加值时,这些值的行为会不同,