Python 减少列表字典的最佳方法

Python 减少列表字典的最佳方法,python,Python,我问这个问题是为了得到一个Pythonic方法的起点,即使用列表理解来减少以下词典中的一些列表内容: {'cycle1': [1, 2407, 2393, 14], 'cycle2': [2, 1657, 1652, 5], 'cycle3': [3, 2698, 2673, 25], 'cycle4': [4, 2116, 2102, 14], 'cycle5': [5, 2065, 2048, 17], 'cycle6': [6, 1633, 1615, 18]} 每个列

我问这个问题是为了得到一个Pythonic方法的起点,即使用列表理解来减少以下词典中的一些列表内容:

{'cycle1': [1, 2407, 2393, 14],
 'cycle2': [2, 1657, 1652, 5], 
 'cycle3': [3, 2698, 2673, 25], 
 'cycle4': [4, 2116, 2102, 14], 
 'cycle5': [5, 2065, 2048, 17], 
 'cycle6': [6, 1633, 1615, 18]}
每个列表的列(尽管未标记)都有以下标题:

section_num,account_total,billable_count,nonbillable_count
我想对列表中最后三列中的每一列求和,account_total,billable_count,non-billable_count


我只是不知道如何在理解中总结每个列表成员。我需要询问每个键的值,每个值都是一个列表。我只是有点不确定该怎么做。

对于所请求的输出格式有点不清楚,但下面这行总结了第二列:

In [13]: c = {'cycle1': [1, 2407, 2393, 14],
 'cycle2': [2, 1657, 1652, 5], 
 'cycle3': [3, 2698, 2673, 25], 
 'cycle4': [4, 2116, 2102, 14], 
 'cycle5': [5, 2065, 2048, 17], 
 'cycle6': [6, 1633, 1615, 18]}

In [14]: sum([v[1] for k, v in c.iteritems()])
Out[14]: 12576
使用python3.3

>>> sum([v[1] for v in c.values()])
12576

使用
zip
怎么样?这会对每一列单独求和,尽管我不确定这是否是您想要的

[sum(x) for x in zip(*my_dict.values())[1:]]
这将产生:

[12576, 12483, 93]

我基本上是想创建一个循环——我们称之为cycle9——它忽略每个列表的第0个元素,并对所有元素1的值、所有元素2的值和所有元素3的值求和。啊,那么你需要@Squiguy给出的解决方案也得到了这个错误:sum([v[1]代表k,v在c.iteritems()])Traceback(最近一次调用):File“”,第1行,在TypeError中:“list”对象不可调用请参见更新的示例,使用2.7为我(tm)工作。3.3需要稍加修改删除
sum
中的
[]
方括号,生成一个更高效的生成器表达式,而不是列表理解。我有点困惑。“*”在
*my_dict.values())
中的作用是什么?此外,我在2.7[sum(x)for x in zip(*my_dict.values())[1:]Traceback(最近一次调用):文件“”,第1行的TypeError:“list”对象不可调用这是一种解压数据结构中所有参数的方法。请参阅此链接:或参阅以获取详细信息explanation@octopusgrabbus奇怪的是,它在2.7.3中对我有效。你是把一个变量名弄混了还是不小心复制错了?@octopusgrabbus很好,很高兴我能帮上忙。python的方法是让dict内容是对象而不是列表……具体的例子?我基本上认为我可以将循环和剩余值表示为一个列表。我还能用什么方法呢?Python现在没有强制对象,是吗?如果我理解正确,您有4个独立的相关值-
section\u num
account\u total
可计费的\u count
不可计费的\u count
。在任何一种编程语言中,它看起来像一个有4个不同字段的对象,而不是一个列表。显然,你可以使用一个列表,但你必须记录它,记住哪个列表索引是哪个字段,等等-这可能会起作用,但它会使维护变得更困难,所以我认为这是一种糟糕的风格,除非你有一个很好的理由,而这在问题中没有提到。