在用户输入中搜索关键字,并在字典中找到相应的关键字

2024-03-29 01:24:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我在做一个搜索引擎,我试着编码,这样当用户输入一些关键字时,它就会在字典里搜索关键字并打印出关键字和条目。你知道吗

Canada = {'name': 'Canada', 'continent': 'North America', 'capital': 'Ottawa', 'currency': 'Canadian dollar',
          'population': '32,268,240', 'area': '9,970,610'}
Laos = {'name': 'Laos', 'continent': 'Asia', 'capital': 'Vientiane', 'currency': 'Lao kip',
          'population': '5,924,145', 'area': '236,800'}
Mexico = {'name': 'Mexico', 'continent': 'North America', 'capital': 'Mexico City', 'currency': 'Mexico peso',
        'population': '107,029,400', 'area': '1,958,201'}
key_words = ("Canada", "Mexico", "Laos")
key = ("area", "population", "currency")
user_input = input("Type: ")

for word in user_input.split():
   if word in key_words:
      print()

你能帮我编码吗 例如: 当用户输入:“墨西哥货币”时打印出:墨西哥比索,或当用户输入:“老挝地区”时打印出236800。你知道吗


Tags: key用户name编码inputarea关键字currency
3条回答

不是短期的,而是更明确、更广泛的解决方案。例如,对于Area and population of Canada这样的查询,它将打印:

Type: area and population of Canada
results:
area = 9,970,610
population = 32,268,240
from collections import defaultdict

Canada = {'name': 'Canada', 'continent': 'North America', 'capital': 'Ottawa', 'currency': 'Canadian dollar',
          'population': '32,268,240', 'area': '9,970,610'}
Laos = {'name': 'Laos', 'continent': 'Asia', 'capital': 'Vientiane', 'currency': 'Lao kip',
          'population': '5,924,145', 'area': '236,800'}
Mexico = {'name': 'Mexico', 'continent': 'North America', 'capital': 'Mexico City', 'currency': 'Mexico peso',
        'population': '107,029,400', 'area': '1,958,201'}

key = set(["area", "population", "currency"])

# build the forward and reverse indexes
forward_index = [Canada, Laos, Mexico]
reverse_index = defaultdict(set)

for i, description in enumerate(forward_index):
    phrase = ' '.join(['%s %s'%(k,v) for k, v in description.items()])
    words = phrase.lower().split()
    for w in words:
        reverse_index[w].add(i)

# search
user_input = input("Type: ")

res = None
keywords = set()
for word in user_input.lower().split():
    if word in key:
        keywords.add(word)

    posting_set = reverse_index.get(word, None)

    # tolerant search: skip missing words
    if posting_set is None:
        continue

    if res is None:
        res = posting_set
    else:
        res = res.intersection(posting_set)

# print all the results
if res is None or len(keywords) == 0:
    print("<nothing found>")
else:
    print("results:")
    for idx in res:
        desc = forward_index[idx]
        for kw in keywords:
            print("%s = %s" % (kw, desc[kw]))

您可以尝试:

Canada = {'name': 'Canada', 'continent': 'North America', 'capital': 'Ottawa', 'currency': 'Canadian dollar',
          'population': '32,268,240', 'area': '9,970,610'}
Laos = {'name': 'Laos', 'continent': 'Asia', 'capital': 'Vientiane', 'currency': 'Lao kip',
          'population': '5,924,145', 'area': '236,800'}
Mexico = {'name': 'Mexico', 'continent': 'North America', 'capital': 'Mexico City', 'currency': 'Mexico peso',
        'population': '107,029,400', 'area': '1,958,201'}

countries = {'Canada' : Canada, 'Mexico' :Mexico, 'Laos' : Laos} 

user_input = input("Type: ")

asked_country = list(set(user_input.split()).intersection(countries.keys()))[0] 
output = list(set(countries[asked_country].keys()))[0]
print(countries[asked_country][output]) 

# Type: currency of Mexico             
# Mexico peso

你需要为用户设置一些规则,你可以从头开始构建一个模糊查询搜索引擎,但这不是今天要发生的事情。现在,让用户指定他们想要什么,例如ITEM COUNTRY。你知道吗

Enter <query> <country>: currency mexico
>> Mexico pesos

您可以像这样重构代码,使用一个字典来保存所有数据,而不是将其分解为变量。你知道吗

database = {
    'canada': {
        'name': 'Canada',
        'continent': 'North America',
        'capital': 'Ottawa',
        'currency': 'Canadian dollar',
        'population': '32,268,240',
        'area': '9,970,610'
        },
    'laos' : {
        'name': 'Laos',
        'continent': 'Asia',
        'capital': 'Vientiane',
        'currency': 'Lao kip',
          'population': '5,924,145',
        'area': '236,800'
        },
    'mexico': {
        'name': 'Mexico',
        'continent': 'North America',
        'capital': 'Mexico City',
        'currency': 'Mexico peso',
        'population': '107,029,400',
        'area': '1,958,201'
        }
    }

user_input = input("Enter your query: ")
user_input = user_input.lower().split(' ')

# find country
country = None
for keyword in user_input:
    if keyword in database:
        # using .pop() removes the country from the list
        country = user_input.pop(user_input.index(keyword))

# If the user entered a valid country
if country:
    for keyword in user_input:
        if keyword in database.get(country):
            print(keyword, database[country][keyword])

else:
    print('Could not find that country in the database')

编辑:更新代码,使您可以更含糊不清,键入关键字/国家在任何顺序,并有多个关键字

示例:

Enter query: population and currency of mexico
>> currency Mexico peso
>> population 107,029,400

相关问题 更多 >