【发布时间】:2014-08-14 21:46:21
【问题描述】:
我有两个需要比较的字典列表:
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 = 起始坐标,End = 结束坐标。
我需要识别数据库中与 Chr 值匹配并且介于 St 和 End 值之间的值(需要是整数,而不是它们当前的字符串形式)。据我所知,列表理解是实现这一目标的最佳方式。查看this question 是我的概念出发点,但我对如何进行有点困惑。
我的伪代码是:
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 ={[记录 如果记录['Chr'] ==,则在数据库中记录以在 search_list 中查找 查找['Chr'] if int(lookup['St'])
TypeError:字符串索引必须是整数
有没有更好/更合适的方法将键从字符串转换为整数?
【问题讨论】:
-
看不懂 St 和 End 部分,什么是上限/下限
-
您使用的是什么数据库?这似乎是一个查询问题?你的
St和End应该是整数吗?您的数据库是实际数据库还是称为数据库的列表? -
@dm03514 数据库只是一个称为数据库的列表。正如您有帮助地指出的那样,已更新问题以反映 St 和 End,它们应该是整数。
-
@Kobi K 查看更新后的问题。它们是字典中的键。
-
@s_boardman 您收到此异常,因为其中一个字符串无法转换为 int,请确保它只是数字。你可以结合
try except声明并抓住那些给你这个问题的人。
标签: python list dictionary list-comprehension