whe*_*ies 4 python dictionary tuples list
我有一个从数据库中的表中提取的元组列表,它们看起来像(键,外键,值).key和foreignkeys之间有多对一的关系,我想将它转换为由foreignkey索引的dict,其中包含所有值与该外键的总和,即{ foreignkey,sumof ( value ) }.我写了一些相当冗长的东西:
myDict = {}
for item in myTupleList:
if item[1] in myDict:
myDict [ item[1] ] += item[2]
else:
myDict [ item[1] ] = item[2]
Run Code Online (Sandbox Code Playgroud)
但在看到这个问题的答案或者这 两个问题之后,我必须更简洁地表达我想做的事情.如果这是重复,我错过了它,并将删除问题,如果你可以提供链接.
假设您的所有值都是ints,您可以使用a defaultdict来简化:
from collections import defaultdict
myDict = defaultdict(int)
for item in myTupleList:
myDict[item[1]] += item[2]
Run Code Online (Sandbox Code Playgroud)
defaultdict就像一个字典,除非你试图得到一个不在那里的密钥,它填充了callable返回的值 - 在这种情况下,int在没有参数的情况下调用时返回0.
更新:感谢@gnibbler提醒我,但是元组可以在for循环中解压缩:
from collections import defaultdict
myDict = defaultdict(int)
for _, key, val in myTupleList:
myDict[key] += val
Run Code Online (Sandbox Code Playgroud)
这里,3项元组被解压缩到变量_中key,和val._是Python中常见的占位符名称,用于表示该值不是很重要.利用这一点,我们才能避免长毛item[1]和item[2]索引.如果元组中的元组myTupleList大小不同,我们就不能依赖于此,但我敢打赌它们是.
(我们还避免了某人查看代码并认为它被破坏的情况,因为编写者认为数组是1索引的,这是我第一次阅读代码时的想法.在我阅读这个问题之前,我没有对此进行缓解然而,在上面的循环中,很明显它myTupleList是三个元素的元组,我们只是不需要第一个元素.)
from collections import defaultdict
myDict = defaultdict(int)
for _, key, value in myTupleList:
myDict[key] += value
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8826 次 |
| 最近记录: |