我有这样的一个切分和输入,现在我想它可以搜索输入,即使它只是关键字的一部分,那么如何解决它呢?
input = "a"
dict = {'aaa':111,'bbb':222,'ccc':333}
print(dict[input])假设输入和关键词之间没有冲突,例如,
input ='a'
dict = {'aaa':111,'abc':222}是不可能的
发布于 2022-04-13 05:02:07
如果没有冲突,或者如果您愿意接受与输入匹配的第一个键,您可以搜索这些键以找到一个以输入字符串开头的键:
input = "a"
dic = {'aaa':111,'bbb':222,'ccc':333}
dic[[k for k in dic.keys() if k.startswith(input)][0]]输出:
111发布于 2022-04-13 05:02:11
尝尝这个。(Python 3.x)
input = "a"
dict = {'aaa':111,'bbb':222,'ccc':333}
def find(inp, dct):
for k in dct.keys():
if inp.lower() in k.lower():
return dct[k]
return "NOT FOUND"
print(find(input, dict))发布于 2022-04-13 05:12:03
一种方法(虽然不是最简单的方法)是对dict进行子类。
code00.py
#!/usr/bin/env python
import sys
class LooseKeyDict(dict):
def __matching_keys(self, key):
return [e for e in self.keys() if key in e]
def __getitem__(self, key):
mc = self.__matching_keys(key)
if not mc or len(mc) > 1:
raise KeyError(key)
return super().__getitem__(mc[0])
def main(*argv):
d0 = LooseKeyDict({"aaa": 111, "bbb": 222, "ccc": 333})
print(d0["a"])
print(d0["aaa"])
try:
print(d0["aaa1"])
except KeyError as ke:
print("KeyError:", ke)
d1 = LooseKeyDict({"aaa": 111, "abc": 222})
try:
print(d1["a"])
except KeyError as ke:
print("KeyError:", ke)
if __name__ == "__main__":
print("Python {:s} {:03d}bit on {:s}\n".format(" ".join(elem.strip() for elem in sys.version.split("\n")),
64 if sys.maxsize > 0x100000000 else 32, sys.platform))
rc = main(*sys.argv[1:])
print("\nDone.")
sys.exit(rc)输出
cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q071851970> "e:\Work\Dev\VEnvs\py_pc064_03.09_test0\Scripts\python.exe“码00.py Python3.9.9(tag/v3.9.9:ccb0e6a,11月15日2021年,18:08:50) MSC v.1929 64位(AMD64) 064位(AMD64)064位在win32 222 222 KeyError上:'aaa1‘KeyError:'a’完成。
Notes
https://stackoverflow.com/questions/71851970
复制相似问题