在两个单独的dicts上同时执行代码块

时间:2011-04-18 18:19:44

标签: python dictionary

说我有这段代码,我想在两个单独的词典上执行它。如果不编写代码两次,我怎么能这么做呢?我想我可以解决一个小函数,然后将每个字典传递给它。有没有更好的方法?

    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

5 个答案:

答案 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.mfilesself.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