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

У меня есть словарь, который использует 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 - размер кортежа
  • len(keyWords) always = len (k)
  • «None» считается подстановочным знаком
  • Словарь довольно огромный (этот метод занимает ~ 800 мс для выполнения и около 300 МБ), поэтому пространство также является соображением

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

-121--1566430-

Альтернативы CKAN [закрыты] Вам известны альтернативы CKAN? Я ищу метаданные, управляющие программным обеспечением портала с аналогичным набором функций, таким как CKAN. Реализация предпочтительно должна быть либо LAMP, либо Java.

Известны ли вам альтернативы CKAN ? Я ищу метаданные, управляющие программным обеспечением портала с аналогичным набором функций, таким как CKAN.

Реализация предпочтительно должна быть LAMP или Java.

10
задан hippietrail 18 September 2012 в 09:59
поделиться