我正在使用从yaml对象中获得的关于python(2.7)的嵌套字典,我有几个问题一直想通过阅读得到答案,但没有成功。我对巨蟒有点陌生。
最简单的函数之一是读取整个字典并输出其中所有键的列表。我在开头使用下划线,因为这个函数稍后被类中的其他人使用。
class Myclass(object):
@staticmethod
def _get_key_list(d,keylist):
for key,value in d.iteritems():
keylist.append(key)
if isinstance(value,dict):
Myclass._get_key_list(d.get(key),keylist)
return list(set(keylist))
def diff(self,dict2):
keylist = []
all_keys1 = self._get_key_list(self.d,keylist)
all_keys2 = self._get_key_list(dict2,keylist)
... # More code
问题1:这是正确的方法吗?我不确定出于这个原因使用静态方法是否是一个好的实践。自
self._get_key_list(d,keylist)
是递归的,一旦函数被递归调用,我不希望“self”成为第一个参数,这就是常规实例方法将要发生的情况。
我使用了很多静态方法,但是我在很多地方读过,它们在很多地方可能不是很好的实践。我还以为我可以让它们成为模块函数,但我希望它们与类绑定在一起。
问题2:而不是通过争论
keylist
到
Self.\u获取\u key\u列表(d,key list)
,如何初始化递归函数内的空列表并更新它?每次在内部初始化都会将其重置为[]。