【发布时间】:2016-09-17 00:56:15
【问题描述】:
我有以下内容,它将三列表格数据(openpyxl 工作表)解析为defaultdict。
def campaigns_and_adsets_and_pageviews_from_ga(ourTab):
d = defaultdict(lambda: defaultdict(int))
for row in ourTab.rows[1:-1]:
if ('Facebook' in row[0].value) and ('(not set)' not in row[2].value):
d[row[1].value][row[2].value] += row[4].value
return d
其输出如下所示:
In [790]: campaigns_and_adsets_and_pageviews_from_ga(ourTab)
Out[790]:
defaultdict(<function __main__.<lambda>>,
{u'XXX 20160314': defaultdict(int,
{u'Carnival desktopfeed': 2.0,
u'Carnival mobilefeed': 588.0,
u'PYS Broad desktopfeed': 371.0,
u'PYS Broad mobilefeed': 1192.0}),
u'YYY Intl 20150903': defaultdict(int,
{u'CA desktopfeed': 2.0}),
我想要做的是将每个元素中的最终值(即 2.0、588.0 等)乘以一个常数,从而得到另一个 defaultdict(甚至常规嵌套的 dict 也可以)。
可以以某种方式将 defaultdict 解构为嵌套 dict 以使转换成为可能吗?或者还有什么其他可能的方法?
【问题讨论】:
-
你忘记调用函数了。
-
您需要
.items(),这样您实际上是在处理条目。 -
鉴于立即发现了两个错误,我建议您首先 bodge/mock 您的
campaigns_and_adsets_and_pageviews_from_ga函数以仅返回定义嵌套字典的字典文字(不要介意defaultdict):@987654329 @。然后编写正确复制它并将数字加倍的代码。然后切换回返回带有计算结果的defaultdict。这样你就不会因为假设所有问题都与defaultdict有关而分心:-) -
@SteveJessop 中肯,做得好。
标签: python dictionary lambda defaultdict dictionary-comprehension