首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果输入只是关键字的一部分,如何检查dict结果?

如果输入只是关键字的一部分,如何检查dict结果?
EN

Stack Overflow用户
提问于 2022-04-13 04:40:17
回答 3查看 48关注 0票数 0

我有这样的一个切分和输入,现在我想它可以搜索输入,即使它只是关键字的一部分,那么如何解决它呢?

代码语言:javascript
运行
复制
input = "a"
dict = {'aaa':111,'bbb':222,'ccc':333}
print(dict[input])

假设输入和关键词之间没有冲突,例如,

代码语言:javascript
运行
复制
input ='a'
dict = {'aaa':111,'abc':222}

是不可能的

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-04-13 05:02:07

如果没有冲突,或者如果您愿意接受与输入匹配的第一个键,您可以搜索这些键以找到一个以输入字符串开头的键:

代码语言:javascript
运行
复制
input = "a"
dic = {'aaa':111,'bbb':222,'ccc':333}
dic[[k for k in dic.keys() if k.startswith(input)][0]]

输出:

代码语言:javascript
运行
复制
111
票数 2
EN

Stack Overflow用户

发布于 2022-04-13 05:02:11

尝尝这个。(Python 3.x)

代码语言:javascript
运行
复制
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))
票数 0
EN

Stack Overflow用户

发布于 2022-04-13 05:12:03

一种方法(虽然不是最简单的方法)是对dict进行子类。

code00.py

代码语言:javascript
运行
复制
#!/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

  • 这只是为了阅读部分。如果您也想为写(或删除)执行此操作,则还必须重写___setitem__ (或__delitem___)。关于[Python.Docs]:数据模型的更多细节
  • 不要命名您的变量输入或dict,因为您正在跟踪内置的名称
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71851970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档