我正在編寫一個程序,需要使用此函數向xml文件添加依賴項。這段代碼很有用,但我想問一下是否有更多pythonic的方式來這樣做。在Python中迭代字典列表時迭代字典
我相信我以非pythonic的方式做的部分是嵌套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
絕對沒有unpythonic關於嵌套for循環。如果需要,可以將代碼重構爲使用comprehensions,但由於最內層的語句是副作用的,並且不打算返回值,因此它不是明智的選擇。把它包裝在lambda或其他東西中,這樣它就可以在理解中出現。我相信你的循環方法是乾淨的,好的,易於閱讀的代碼,它可能不是一個很好的時間來使它成爲所謂的「pythonic」。 – ely
在調用此函數之前'self.dependencies'將變爲空嗎?如果先將多個字典合併在一起(使用帶有O(1)鍵查找的數據結構),並且之後只創建了XML元素,那麼似乎您的代碼會更快。 – Blckknght
@Blckknght self.dependencies將是一個lxml對象(應該指定)。依賴項中的依賴項是子項。我會研究這一點。 –