如何根据用户输入在Python字典中搜索部分匹配的元素?
我有一个字典,结构大概是这样的:
{
'www.site.sx/file1.html' : 'TITLE1 101 Project Caspian',
'www.site.sx/file2.html' : 'TITLE2 102 Filter Spencer'
}
我希望用户只需要输入 title2 102
就能找到这里的第二个条目,这样程序就可以从相关链接获取资源。请问我该如何使用用户输入的值在字典中进行模糊匹配搜索呢?
举个例子:
用户输入:
title1 101
或者可能输入:
Title1 101
那么,我该如何使用这些输入来在字典中找到匹配的内容呢?
注意: - 字母的大小写是有区别的...
5 个回答
0
dict1 = {"Vendor": ("Cisco", "Juniper", "HP"), "Model": "2600", "RAM": "128", "IOS": "12.4", "Ports": "4"}
search = raw_input("What are you looking for : ")
looking = (dict1[search])
print looking
当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。
0
给定:
In [41]: d = {
....: 'www.site.sx/file1.html' : 'title1 101 Project Caspian',
....: 'www.site.sx/file2.html' : 'title2 102 Filter Spencer'
....: }
In [43]: d.values()
Out[43]: ['title1 101 Project Caspian', 'title2 102 Filter Spencer']
In [48]: d.keys()
Out[48]: ['www.site.sx/file1.html', 'www.site.sx/file2.html']
你可以创建一个函数
In [45]: def index1(vals, item):
....: for i, v in enumerate(vals):
....: if item in v: return i
....: return -1
这样
In [46]: index1(d.values(), 'temp')
Out[46]: -1
In [47]: index1(d.values(), 'title2')
Out[47]: 1
然后,你总是可以这样做:
In [50]: d.keys()[index1(d.values(), 'title2')]
Out[50]: 'www.site.sx/file2.html'
0
我理解你的意思是,你希望程序能够在用户输入时不区分大小写,也就是说用户输入的字母大小写不正确时,程序仍然能正常工作。
一种可能的解决方案是,先把所有的键放到一个排序好的列表里,然后用一种叫做二分查找的方法来找到正确的键。这个方法的查找速度是 O(log(n))
,但在开始时需要花费 O(n log n)
的时间来准备数据。
你的字典看起来会是这样的:
{
'TITLE1 101 Project Caspian' : 'www.site.sx/file1.html',
'TITLE2 102 Filter Spencer' : 'www.site.sx/file2.html',
}
然后你会有一个像这样的排序列表:
['TITLE1 101 Project Caspian', 'TITLE2 102 Filter Spencer']
作为准备步骤,你需要把所有的字母都变成小写,以解决大小写的问题。当用户输入一个 x
时,你需要:
- 把它变成小写。
- 在你的列表中进行二分查找。
- 检查这个输入是否是二分查找返回的元素的前缀。
- 如果是的话,就在你的字典里查找对应的值。
0
如果可以的话,你可能需要重新整理一下你的数据,这样会更好:
DATA = {
'title1 101': ('www.site.sx/file1.html', 'Project Caspian'),
'title2 102': ('www.site.sx/file2.html', 'Filter Spencer'),
}
然后就可以简单地这样做:
user_input = 'Title1 101'
link, title = DATA[user_input]
0
只需要用 in
来检查一个子字符串是否出现在你的完整文本中:
[k for k in mydict if userInput.lower() in mydict[k].lower()]
这样可以返回所有包含匹配文本的链接(当然,可能会有多个这样的链接)。