【发布时间】:2019-10-29 16:09:18
【问题描述】:
我有一组字典声明为定义文件类型的类变量(并存储在FILE_TYPES 中)。我需要循环浏览这些字典以将文件类型名称(存储在“名称”键中)与传递给类的文件名配对。以下哪种方法更符合 Python 风格?或者,有没有更好的方法——也许我缺少一些听写理解?
第一种方式:
filetype = [ftype for ftype in cls.FILE_TYPES if ftype['name'] in filename][0]
第二种方式:
for ftype in cls.FILE_TYPES:
if ftype['name'] in filename:
filetype = ftype
我本身并没有坚持这一点,但我想知道这些方法中的任何一种是否更好(例如,或多或少的 Pythonic),或者它是否对任何人都没有影响。
如果我在 python 中编码,我通常会尽可能避免嵌套逻辑,就像你在第二种方法中看到的那样(完全不知道为什么,但在某些时候,这个习惯是由天晓得的人养成的)。但是,在第一种方法中使用[0] 访问总是单数的列表元素似乎也令人讨厌。
【问题讨论】:
-
这两个代码sn-ps做的不一样
-
这些不做同样的事情。但无论如何,如果您不需要制作列表,请不要使用列表推导。我不太确定您所说的“嵌套逻辑”是什么意思,但据我所知,您似乎在这两种情况下都在这样做。
-
第二个相当于
filetype = [ftype for ftype in cls.FILE_TYPES if ftype['name'] in filename][-1]如果有的话 -
在这种特殊情况下是的,但您也可以在第二个中添加
break语句来消除歧义。相关:Get the first item from an iterable that matches a condition -
再一次,不要在这里使用列表推导(字典推导更没有意义)。只需使用 for 循环,但在找到它时添加一个 break
标签: python python-3.x list-comprehension dictionary-comprehension