我有一个字典列表,其中可以有多个密钥,如果密钥存在,那么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)
答案 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的每个可能键的条目。