Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中结合以下理解?_Python_Dictionary Comprehension - Fatal编程技术网

如何在Python中结合以下理解?

如何在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

我有两本字典是用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) 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次通过)。