Python 如何使用字典理解更改字典中的键值+;如果/否则?

Python 如何使用字典理解更改字典中的键值+;如果/否则?,python,dictionary,derivative,polynomials,Python,Dictionary,Derivative,Polynomials,我得到了一个字典,其中指数系数是多项式的键值对。我的任务是生成一个函数来返回包含导数指数系数键值对的字典。这是我目前得到的,但它不起作用: 为什么会出现语法错误?有人能想出一个很好的补救办法,最好是一个班轮 更新: 多亏了卡尔·克内赫特尔的回答,人们可以将这项任务变成一行简洁的句子: deff_p=lambda d:{e-1:c*e表示e,c表示d中的c.items(),如果e!=0}请尝试以下操作: def diff_p(d): d = {i-1: i*d[i] for i in d

我得到了一个字典,其中指数系数是多项式的键值对。我的任务是生成一个函数来返回包含导数指数系数键值对的字典。这是我目前得到的,但它不起作用:

为什么会出现语法错误?有人能想出一个很好的补救办法,最好是一个班轮

更新:

多亏了卡尔·克内赫特尔的回答,人们可以将这项任务变成一行简洁的句子:

deff_p=lambda d:{e-1:c*e表示e,c表示d中的c.items(),如果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
视为表达式中的单个“术语”。事实并非如此。您需要对键和值使用单独的条件逻辑

另外,您应该使用
==
=
用于数值比较,not
为非

所以这将给你
{(i-1如果i!=0其他d[i]):(i*d[i]如果i!=0其他0)作为d}
。(没有括号应该可以用,但我觉得这样读真的很难。)

也就是说,鉴于你的字典表示多项式的系数,而函数执行微分,我不明白你为什么要加上这个奇怪的特例术语。当你微分时,多项式的常数项应该完全消失;因此,自然的逻辑是将其完全过滤掉,比如:
{i-1:i*d[i],如果i!=0}


最后,通常认为直接迭代字典中的键值对(“项”)更干净:
{e-1:c*e表示e,c表示d.items(),如果e!=0}
(这里我写了
e
表示“指数”,写了
c
表示“系数”)。

那么
else
子句应该是什么意思
else
0?如果指数(d[i])是0(x^0=1),这意味着d[i]是一个常数,那么它的导数是0,因此d[i]:0你的意思是,如果
i
不是0,那么
d={i-1:i*d[i]}
。否则,
d={d[i]:0}
?但是,在这种情况下,假设
i
为0。Python认为你的意思是:
d={i-1:d[i]:0代表d}
中的i,因为你的
if..else
工作在:
i*d[i]如果我不是0 else d[i]
。是的,这正是我想要的,想想看。我不需要导数的0键:)非常感谢,这是非常有用的信息,澄清了问题,也是最好的答案!
i - 1: i*d[i] if i is not 0 else d[i]: 0