Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用列表理解来匹配存储在列表中的词典的值_Python_List_Dictionary_List Comprehension - Fatal编程技术网

Python 使用列表理解来匹配存储在列表中的词典的值

Python 使用列表理解来匹配存储在列表中的词典的值,python,list,dictionary,list-comprehension,Python,List,Dictionary,List Comprehension,我有两个字典列表需要比较: search_list =[{'Chr':'chr1','St':'2345','End':'2456'}, {'Chr':'chr1','St':'3457','End':'4567'}] 及 因此,列表中的每个词典如下所示: {'Chr':'chr1','St':'2345','End':'2456'} 其中Chr=染色体,St=起始坐标,End=结束坐标 我需要识别数据库中与Chr值匹配且介于St和End值之间的值(需要是整数,而

我有两个字典列表需要比较:

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

因此,列表中的每个词典如下所示:

{'Chr':'chr1','St':'2345','End':'2456'}
其中Chr=染色体,St=起始坐标,End=结束坐标

我需要识别数据库中与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']]

matched=[var-for-var-in-search\u-list其中search\u-list['Chr']==database['Chr']和search\u-list['St']>=database['St']这是一个粗略的代码,但是这个怎么样

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
matched=[]
对于搜索列表中的d:
对于数据库中的数据库:
如果d[“Chr”]==db[“Chr”]:
如果db[“St”]>=d[“St”]和db[“St”]您可以使用:
此代码将迭代
数据库中的元素
dict,并检查
搜索列表中的条件

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'}
正在匹配
搜索列表中的条件

无法理解St和End部分,上限/下限是什么?您使用的是什么数据库?这似乎可能是一个查询问题?您的
St
End
应该是整数吗?您的数据库是实际的数据库还是一个名为database的列表?@dm03514 database只是一个名为“数据库”的列表。更新了问题以反映St和End正如您所指出的,它们应该是int。@Kobi K请参阅更新的问题。它们是dict中的键。@s_boardman您会遇到此异常,因为其中一个字符串无法转换为int,请确保它只是数字。您可以组合一个
try except
s陈述并抓住给你这个问题的答案。谢谢,这是有道理的。我已经尝试过了,但是现在遇到了将St键和End键的值从str转换为int的问题。我相应地更新了我的问题。更改了我的起点,使其完美工作。谢谢@KobiK!
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']]
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'}]