【发布时间】:2016-02-25 20:54:15
【问题描述】:
我正在编写一个程序,需要使用此函数将依赖项添加到 xml 文件。这段代码有效,但我想问一下是否有更 Pythonic 的方式来做到这一点。
我相信我以非 Python 方式做的部分是嵌套的 for 循环。有没有更好的方法来迭代字典列表和每个值?
def add_Dependencies(self):
""" Adds the dependencies in a feature using dictionaries. When
a feature is loaded, its dependencies are added to
dictionaries. Three for each type of software that the
dependencies are categorized as."""
dependency_dict_list = [
self.os_dict, self.visual_dict, self.audio_dict
]
dependencies = self.dependencies
for dictionary in dependency_dict_list:
for feature, software in dictionary.items():
if all(dependency.text != feature for dependency in dependencies):
etree.SubElement(dependencies,"Dependency", Software = software).text = feature
【问题讨论】:
-
对于嵌套的 for 循环,绝对没有什么不合情理的。如果您愿意,可以重构您的代码以使用理解,但由于最里面的语句是有副作用的,并且不打算返回一个值,因此例如不明智的做法是将它包装在 lambda 或其他东西中,以便它可以在理解中出现。我相信您使用循环的方法是干净、良好、易于阅读的代码,而且它可能不是很好地利用时间来制作所谓的“pythonic”。
-
self.dependencies在调用此函数之前是否为空?如果您首先将多个字典合并在一起(使用具有 O(1) 键查找的数据结构),然后仅创建 XML 元素,那么您的代码似乎会更快。 -
@Blckknght self.dependencies 将是一个 lxml 对象(应该已指定。)依赖项中的依赖项是子项。我会调查的。
-
@Mr.F 感谢您的反馈。
-
@Mr.F 我很高兴听到一位更有经验的 python 用户说,列出理解所有的东西并不总是最 Python 的方式。就个人而言,10 个示例中有 9 个我仍然觉得没有它们更清晰、更容易理解更冗长的代码。
标签: python python-3.x dictionary