Оптимизация частичного совпадения ключей словаря

У меня есть словарь, в котором в качестве ключа используется 4-кортеж. Мне нужно найти все ключи в словаре, которые частично соответствуют другому кортежу. У меня есть код, который делает это, но он медленный и требует оптимизации.

Вот что мне нужно:

Keys:
(1, 2, 3, 4)
(1, 3, 5, 2)
(2, 4, 8, 7)
(1, 4, 3, 4)
Match:
(1, None, 3, None)
Result:
[(1, 2, 3, 4), (1, 4, 3, 4)]

Текущий код:

def GetTuples(self, keyWords):
    tuples = []
    for k in self.chain.iterkeys():
        match = True
        for i in range(self.order):
            if keyWords[i] is not None and keyWords[i] != k[i]:
                match = False
                break
        if match is True:
            tuples.append(k)
    return tuples
  • keyWords - это список, содержащий значения, которые я хочу сопоставить
  • self.chain - словарь
  • self.order - это размер tuple
  • len (keyWords) always = len (k)
  • 'None' считается подстановочным знаком
  • Словарь довольно большой (для выполнения этого метода требуется ~ 800 мсек и около 300 МБ), поэтому места также соображение

Я в основном ищу либо оптимизацию этого метода, либо лучший способ хранения этих данных.

6
задан abbot 4 October 2011 в 11:16
поделиться