高效的方式来处理大量的字典

时间:2016-02-19 08:19:14

标签: python

我有一个字典列表,其中可以有多个密钥,如果密钥存在,那么key的值需要基于密钥的操作。目前我的代码迭代所有字典并检查密钥是否存在然后执行操作。有没有其他方法可以有效地实现相同,因为我正在观察250+字典列表,执行需要相当长的时间。我也无法并行执行。 set 方法是执行命令的包装。

class Exec(object):

def _execute(self, mappers):
    self.cmds = list()
    for mapper in mappers:
        self._prepare_cmd(mapper)

    for cmd in self.cmds:
        self.set(cmd.split())

def _prepare_cmd(self, mapper):
    if mapper['pos']:
        cmd1 = 'set position ' + str(mapper['pos'])
        self.cmds.append(cmd1)

    if mapper['distance']:
        cmd2 = 'set distance ' + str(mapper['distance'])
        self.cmds.append(cmd2)

    if mapper['user']:
        cmd3 = 'set privilege ' + str(mapper['user'])
        self.cmds.append(cmd3)

    if mapper['deny']:
        cmd4 = 'set access ' + mapper['deny']
        self.cmds.append(cmd4)

    if mapper['instance_of']:
        cmd5 = 'set instance_o f' + mapper['instance_of']
        self.cmds.append(cmd5)

    if mapper['is_shared']:
        cmd6 = 'set allow_shared ' + mapper['is_shared']
        self.cmds.append(cmd6)

1 个答案:

答案 0 :(得分:0)

如果你真的需要这样做,你可以做类似的事情:

1)定义密钥和目标api之间的映射:

mapping = {
    'pos' : 'position',
    'distance' : 'distance',
    'user' : 'privilege',
    'deny' : 'access',
    'instance_of' : 'instance_of',
    'is_shared' : 'allow_shared'
}

2)替换你的_prepare_cmd功能:

def _prepare_cmd(self, one_dict):
    self.cmds += ['set {} {}'.format(mapping[k], str(v) for k, v in one_dict.items()]

假设mapping包含您的dicts的每个可能键的条目。