for item in data_dict:
for k, v in item.items():
if k == 'MATCH':
print('found')
вы не используете dict должным образом, просто используете его как список кортежей. Просто напишите:
for item in data_dict:
if 'MATCH' in item:
print('found: ',item['MATCH'])
# break here? not if you want multiple matches
То же самое относится и к другому циклу. Но я только уменьшил сложность с O(n**2)
до O(n)
. Вы по-прежнему выполняете линейный поиск в списке словарей, но он все еще не подходит.
Другой способ: создать один словарь со списками элементов в качестве элементов вместо списка словарей с элементами.
Таким образом, вы получите всю информацию с помощью 1 ключевого поиска. Практический пример:
Допустим, ваши данные выглядят так:
list_of_dicts = [
{'MATCH':12, 'foo':14},
{'MATCH':5, 'bar':2},
{'what':0}
]
преобразуйте его как список списков с помощью collections.defaultdict(list)
:
import collections
dict_of_lists = collections.defaultdict(list)
for d in list_of_dicts:
for k,v in d.items():
dict_of_lists[k].append(v)
Давайте посмотрим на новый диктант:
>>> dict_of_lists
{'MATCH': [12, 5],
'bar': [2],
'foo': [14],
'what': [0]}
как только это будет сделано, просто получите все значения, соответствующие ключу, с этим:
if 'MATCH' in dict_of_lists:
print(dict_of_lists['MATCH'])
который печатает:
[12, 5]
Преобразование, выполненное в начале, должно быть выполнено только один раз (или не совсем, если данные правильно организованы с самого начала), чтобы получить супер быстрый и простой поиск данных.