[英]How to remove empty key-value from dictionary comprehension when applying filter
[英]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
作为表达式中的单个“术语”。 他们不是。 您需要为键和值使用单独的条件逻辑。
此外,你应该使用==
和!=
为数值比较,不is
和is 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.