如何使用字典理解+ if/else更改字典中的键值?
How to change key-value in dictionary using dictionary comprehension + if/else?
我得到了一个字典,其中指数系数作为多项式的键值对。我的任务是创建一个函数 return 一个包含导数指数-系数键值对的字典。这是我到目前为止所得到的,但它不起作用:
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
视为单个 "terms"。他们不是。您需要为键和值使用单独的条件逻辑。
此外,您应该使用 ==
和 !=
进行数值比较,而不是 is
和 is not
。
所以这会给你 {(i - 1 if i != 0 else d[i]): (i*d[i] if i != 0 else 0) for i in d}
。 (它应该没有括号,但我认为那样阅读真的很难。)
就是说,假设您的字典表示多项式的系数,并且该函数执行微分,我不明白您为什么要输入这个奇怪的 special-cased 项。当你区分时,多项式的常数项应该完全消失;因此,自然逻辑是将其完全过滤掉,例如:{i - 1: i*d[i] for i in d if i != 0}
.
最后,通常认为直接遍历字典的 key-value 对 ("items") 更干净:{e - 1: c * e for e, c in d.items() if e != 0}
(这里我写了 e
for "exponent" 和 c
对于 "coefficient").
我得到了一个字典,其中指数系数作为多项式的键值对。我的任务是创建一个函数 return 一个包含导数指数-系数键值对的字典。这是我到目前为止所得到的,但它不起作用:
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
视为单个 "terms"。他们不是。您需要为键和值使用单独的条件逻辑。
此外,您应该使用 ==
和 !=
进行数值比较,而不是 is
和 is not
。
所以这会给你 {(i - 1 if i != 0 else d[i]): (i*d[i] if i != 0 else 0) for i in d}
。 (它应该没有括号,但我认为那样阅读真的很难。)
就是说,假设您的字典表示多项式的系数,并且该函数执行微分,我不明白您为什么要输入这个奇怪的 special-cased 项。当你区分时,多项式的常数项应该完全消失;因此,自然逻辑是将其完全过滤掉,例如:{i - 1: i*d[i] for i in d if i != 0}
.
最后,通常认为直接遍历字典的 key-value 对 ("items") 更干净:{e - 1: c * e for e, c in d.items() if e != 0}
(这里我写了 e
for "exponent" 和 c
对于 "coefficient").