繁体   English   中英

如何使用字典理解+ if / else更改字典中的键值?

[英]How to change key-value in dictionary using dictionary comprehension + if/else?

我给了一个带有指数的字典 - 系数作为多项式的键值对。 我的任务是创建一个函数来返回包含派生指数 - 系数键 - 值对的字典。 这是我到目前为止所得到的,但它不起作用:

def diff_p(d):
    d = {i - 1: i*d[i] if i is not 0 else d[i]: 0 for i in d}
    return d

p = {0: -3, 3: 2, 5: -1}

为什么我会收到语法错误? 有人可以提出一个很好的补救措施,最好是一个班轮吗?

更新:

感谢Karl Knechtel的回答,人们可以将这个任务变成这个整齐的一个班轮:

deff_p = lambda d: {e - 1: c*e for e, c in d.items() if e != 0}

尝试这个:

def diff_p(d):
    d = {i-1: i*d[i] for i in d if i != 0}
    return d

这简单地删除了常数项(即零指数),因为其导数为零。

i - 1: i*d[i] if i is not 0 else d[i]: 0

问题是你在考虑i - 1: i*d[i]d[i]: 0作为表达式中的单个“术语”。 他们不是。 您需要为键和值使用单独的条件逻辑。

此外,你应该使用==!=为数值比较,不isis not

所以这会给你{(i - 1 if i != 0 else d[i]): (i*d[i] if i != 0 else 0) for i in d} (它应该没有括号,但我认为这很难读。)

也就是说,鉴于你的字典代表多项式的系数,并且函数执行区分,我无法理解你为什么要加入这个奇怪的特殊术语。 当你区分时,多项式的常数项应该完全消失; 因此,自然逻辑是完全过滤出来的,例如: {i - 1: i*d[i] for i in d if i != 0}

最后,通常认为直接迭代字典的键值对(“项目”)是更清晰的: {e - 1: c * e for e, c in d.items() if e != 0} (这里我为“指数”写了e ,为“系数”写了c

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM