如何在Python中结合以下理解?
我有两本字典是用dict comprehension编写的。我想知道(a)是否有一种方法可以一次完成,(b)是否可取?(c)是否有更好的方法如何在Python中结合以下理解?,python,dictionary-comprehension,Python,Dictionary Comprehension,我有两本字典是用dict comprehension编写的。我想知道(a)是否有一种方法可以一次完成,(b)是否可取?(c)是否有更好的方法 templates_gray={k:cv2.imread(v,0)表示静态_templates.items()中的(k,v) img_dimension={k:v.shape for(k,v)in templates_gray.items()} 直接替换模板的上表达式\u gray: img_dimension = {k:v.shape for (k, v
templates_gray={k:cv2.imread(v,0)表示静态_templates.items()中的(k,v)
img_dimension={k:v.shape for(k,v)in templates_gray.items()}
直接替换模板的上表达式\u gray
:
img_dimension = {k:v.shape for (k, v) in
{k:cv2.imread(v, 0) for (k, v) in
static_templates.items()
}.items()
}
是否明智完全取决于您的使用和维护环境。我发现这一行的版本可读性较差。至少,它需要一个注释来解释整体效果。a)你肯定可以在一行中完成。在第二次迭代中,实际上只为字典中的每个值获取一个属性
img_dimension={k:cv2.imread(v,0).静态_模板中k,v的形状.items()}
B)它越来越难读了,我想我不会那么做。您可以在多行上理解,这可能会有所帮助
img\u维度={
k:cv2.imread(v,0).形状
对于静态_模板中的k,v.items()
}
C)我想我要做的是把理解和函数结合起来。这使得逻辑无法理解,我认为更容易阅读。我不知道定义一个函数是否会打破你对一行代码的渴望
def get_形(v):
x=cv2.imread(v,0)
返回x.shape
img_dimension={k:get_形状(v)表示k,v在静态_模板中。items()}
注意:这假设
模板\u gray
不是您以后需要使用的东西。对于(a),我想检查顶部的答案,对于(b),我想说,答案是一行,但我基本上很难阅读。因此,我建议将其扩展以使其更有意义。对于(c),除了Jacinator的答案,它实际上定义了一个函数,而不仅仅是一行代码,我不知道。我想说可能没有,但那只是我的猜测。而且,这取决于您对“最佳”的定义。我同意,这一行代码的可读性要差得多,而且这种方法实际上没有任何性能改进。您的“一行代码”根本没有提高性能。所有项目仍然有两次通过,而这一切都可以在一次通过中完成。两个或多个理解的良好合并可以大大提高性能,这取决于您的数据量。您可以接受您认为最好的任何答案。我支持您的答案-我自己在不需要子结果(根据您的说明)时进行复杂理解(以B格式为可读性)。当我做一些我想测试的事情或者在其他代码(库/复制粘贴)中可能有用时,我使用C方法+正确地进行“合并”(A),而不是在彼此内部进行两次理解(如@Prune的回答),可以提高性能(1次通过列表而不是2次通过)。