如果我有这种类型的字典:
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()中的值:
我无法通过索引访问它来汇总所需的值。
我很想知道如何实现这一点。谢谢
这个对我有用:
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]}
您可以使用Python的列表理解功能创建和汇总每种颜色的索引元素的临时列表,如下所示:
for animal, colors in a_dictionary.items():
print(
animal,
[
sum([color[1] for color in colors]),
sum([color[2] for color in colors]),
]
)
通常,在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列表将它们存储为字符串。使用类似访问这些列表的键。如果需要获取所有会话密钥的列表,则可能需要维护一组密钥字符串。
问题内容: 问题 我正在以以下方式创建一个空列表作为值的字典。 字典看起来像这样。 当我将一个值附加到一个列表时,此示例将值附加到所有列表。 问题 我的问题分为两部分。首先,为什么会这样?第二,我该怎么办?也就是说,如何将一个值仅附加到一个列表中? 我想象在创建字典时,我使所有列表都指向同一个对象。但是我不明白怎么回事,因为当我输入而不是在字典创建中,然后添加值而不是附加值时,这些值的行为会不同,