我需要创建GUI(Python 3.6),允许用户建立一个查询,该查询根据关键字和/或条件对字典进行搜索。我已经建立了如下字典词典:
{ID: {section_name: list of tuples}}
我只想显示ID,其元组列表包含基于和/或查询的某些关键字。对于这些ID,我只想对包含该关键字至少一次的部分显示每个部分中查询中包含的每个关键词的数量。例如:
查询:文本包含(关键字1和关键字3)或(关键字1和关键字2)
d = {1: {A: [(abc keyword1),(cde keyword2)], B: [(efg keyword1), (hij keyword3)], C: [(klm keyword2), (mno keyword3)]},2: {A: [(opr keyword1), (abc keyword4)], B: [(elm keyword5), (sbd keyword6)], C: [(sjd keyword6), (cde keyword4)]}}
result = {1: {keyword1: {A: 1, B: 1}, keyword2: {A: 1, C: 1}, keyword3: {B: 1, C: 1}}}
目前,我拥有允许我包含一个关键字的条件的代码:
result = []
for key, value in d.items():
for key2, value2 in value.items():
counter = 0
for i in value2:
for j in range (1,len(i)):
if keyword in i[j].lower():
counter =+ i[j].lower().count(keyword)
if counter > 0:
result.append([key, key2, counter])
result = [[1, A, 1],[1, B, 1],[2, A, 1]]
在循环中(“对于范围(1,len(i)中的j)”),我省略了第一个元素,因为我不想将其包含在关键字搜索中。
我正在学习Python,并且以前从未使用过GUI,所以我不知道我应该如何修改此代码以与用户输入配合使用,从而允许他们在任何条件下选择尽可能多的关键字, /或配置。如果描述不清楚,我很抱歉,我仍在这里学习提出适当的问题,很高兴解释是否有不清楚的地方。
编辑:
我设法到达了可以基于用户输入构造查询的地步,下面是一个具有三个独立输入(每个输入可能包含多个值)的示例:
def getKeywords(*tuple):
keywordsList = list(map(str, input("Input keywords:").split()))
return(keywordsList)
def makeQuery(list):
keyList = ['"'+ s + '"' + ' in i[0]' for s in list]
keywords = tuple(keyList)
return(keywords)
def queryAnd(*tuple):
queryFin = ''.join(' and '.join(elems) for elems in tuple)
queryFin = "(" + queryFin + ")"
return(queryFin)
def queryOr(*args):
queryFin2 = ' or '.join(args)
queryFin2 = "(" + queryFin2 + ")"
return(queryFin2)
keywords1 = getKeywords()
keywords2 = getKeywords()
keywords3 = getKeywords()
query1 = makeQuery(keywords1)
query2 = makeQuery(keywords2)
query3 = makeQuery(keywords3)
i = ["abc def ghi","jkl mno pqr"]
condition = '%s' % (queryOr(queryAnd(query1), queryAnd(query2), queryAnd(query3)))
if condition == True:
print("Found!")
else:
print("Not found!")
我想将此条件作为变量包含在“ IF”语句中,但是上面的代码(最后4行)不起作用。有什么方法可以使用包含某些条件的变量来构建“ IF”语句?