Использование определения списка для соответствия значениям словарей, которые хранятся в списках

У меня есть два списка словарей, которые мне нужно сравнить:

search_list =[{'Chr':'chr1','St':'2345','End':'2456'}, {'Chr':'chr1','St':'3457','End':'4567'}] 

а также

 database = [{'Chr':'chr1','St':'2348','End':'2348'}, {'Chr':'chr1','St':'190','End':'190'}] 

Поэтому каждый словарь в списке выглядит следующим образом:

 {'Chr':'chr1','St':'2345','End':'2456'} 

Где Chr = Хромосома, St = начальная координата и Конец = конечная координата.

Мне нужно определить значения в базе данных, которые соответствуют значению Chr, и находятся между значениями St и End (которые должны быть целыми, а не их текущей строкой). Из того, что я могу рассказать, понимание списка – лучший способ добиться этого. Рассмотрение этого вопроса было моей концептуальной отправной точкой, но я немного смущен о том, как действовать дальше.

Мой псевдокод:

 matched = [var for var in search_list where search_list['Chr'] == database['Chr'] AND search_list['St'] >= database['St'] <= search_list['End']] 

Но, очевидно, это очень грубо! Любые предложения будут приветствоваться.

Обновление Я пробовал предложение KobiK, похоже, что он должен работать. Но теперь мне трудно преобразовать значения, привязанные к клавишам «St» и «End», от строк до целых чисел, чтобы выполнить математический поиск.

Вот что у меня есть:

 matchedVars ={[record for record in database for lookup in search_list if record['Chr'] == lookup['Chr'] if int(lookup['St']) <= int(record['St']) <= int(lookup['End'])]} 

Но это порождает эту ошибку:

Файл «snp_freq_V1-4.py», строка 86, в

matchedVars = {[запись для записи в базу данных для поиска в search_list, если запись ['Chr'] == lookup ['Chr'], если int (lookup ['St']) <= int (запись ['St']) < = int (lookup ['End'])]}

TypeError: строковые индексы должны быть целыми числами

Есть ли лучший / более подходящий способ преобразования ключей из строк в ints?

    Вы можете использовать понимание списка : этот код будет итерировать элементы в database dict и будет проверять критерии в search_list

     search_list =[{'Chr':'chr1','St':'2345','End':'2456'},{'Chr':'chr2','St':'3457','End':'4567'}] database = [{'Chr':'chr1','St':'2348','End':'2348'},{'Chr':'chr2','St':'190','End':'190'}] print [record for record in database for lookup in search_list if record['Chr'] == lookup['Chr'] if lookup['St'] <= record['St'] <= lookup['End']] 

    Вывод:

     [{'Chr': 'chr1', 'End': '2348', 'St': '2348'}] 

    Как вы можете видеть на выходе только {'Chr': 'chr1', 'End': '2348', 'St': '2348'} соответствует критериям внутри search_list

    Это грубый код, но как насчет этого?

     matched = [] for d in search_list: for db in database: if d["Chr"] == db["Chr"]: if db["St"] >= d["St"] and db["St"] <= d["End"]: matched.append(db) print matched 

    Надеюсь, это поможет