说我有这段代码,我想在两个单独的词典上执行它。如果不编写代码两次,我怎么能这么做呢?我想我可以解决一个小函数,然后将每个字典传递给它。有没有更好的方法?
for key, value in self.mfiles.iteritems():
if key not in self.INPUT['extras']:
self.mfiles[key] = self.dirs['confdir'] + '/' + value
for key, value in self.nmfiles.iteritems():
if key not in self.INPUT['extras']:
self.nmfiles[key] = self.dirs['confdir'] + '/' + value
答案 0 :(得分:4)
你可以这样做:
for data in (self.mfiles, self.nmfiles):
for key, value in data.iteritems():
if key not in self.INPUT['extras']:
data[key] = self.dirs['confdir'] + '/' + value
但是,我认为写一个小函数可能更清楚。
答案 1 :(得分:1)
制作一个使用字典作为参数的方法
class MyClass:
def doit(self, dictionary):
for key, value in dictionary.iteritems():
if key not in self.INPUT['extras']:
dictionary[key] = self.dirs['confdir'] + '/' + value
def run(self):
self.doit(self.mfiles)
self.doit(self.nmfiles)
答案 2 :(得分:1)
我会使用将代码分解为另一个函数的组合,并在要变异的所有字典上运行map(在可迭代的所有项上运行函数):
def doSomething(self, dic):
for key, value in dic.iteritems():
if key not in self.INPUT['extras']:
dic[key] = self.dirs['confdir'] + '/' + value
def runMe(self):
map(doSomething, [self.mfiles, self.nmfiles])
答案 3 :(得分:0)
将其写为函数f
,然后map(f, [self.mfiles.iteritems, self.nmfiles.iteritems])
。
答案 4 :(得分:0)
如果您知道self.mfiles
和self.nmfiles
不共享相同的密钥,那么您可以执行“合并”并对其进行迭代。
for key, value in dict(self.mfiles, **self.nmfiles).iteritems():
# do stuff
否则,分别迭代每个:
for d in (self.mfiles, self.nmfiles):
for key, value in d.iteritems():
# do stuff