2016-02-19 5 views
-5

У меня есть список словарей, в которых может быть несколько ключей, и если ключ существует, то значение ключа требует операции на основе ключа. В настоящее время мой код перебирает весь словарь и проверяет, существуют ли ключи, а затем выполните операцию. Есть ли другой способ добиться того же самого эффективного, потому что я наблюдаю со списком 250+ словарей, выполнение занимает значительное количество времени. Я также не могу распараллелить выполнение. Метод - это оболочка для выполнения команды.Эффективный способ работы с большим количеством словарей

класс Exec (объект):

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

Пожалуйста, укажите ваш код. См. [Как задать хороший вопрос] (http://stackoverflow.com/help/how-to-ask) –

+0

О, для этого он был опущен. Я буду включать код. – nebi

+1

Каковы ключи, а какие - значения? (то есть оба int). Кроме того, включите пример кода именно того, что вы пытаетесь улучшить. –

ответ

0

Если вы действительно должны сделать это так, вы могли бы сделать что-то вроде:

1) Определите соответствие между ключами и целевой апи :

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.

Смежные вопросы