在词典中搜索关键词python

时间:2014-08-15 09:37:20

标签: python python-2.7

我有一些像这样的函数,输入是一个包含一些关键字(字符串)的列表,并返回更适合字典中所有关键字存储的键:

def find_my_keyword(str1):
   dict_colour = {
       "y": {'has':["yellow", "white", "green"], 'hasnt':[]},
       "z": {'has':["yellow", "white"], 'hasnt': ["green"]},
       "z2": {'has':["yellow", "white", "1."], 'hasnt': ["green"]} }

     for colour, keywords in dict_colour.items():
        if all(kw in str1 for kw in keywords['has']) and not any(kw in str1 for kw in keywords['hasnt']):
              return colour


find_my_keyword(str1)

我试过这个字符串:

str1 = ("white, "yellow", "1.2")
str2 = ("white, "yellow", "1.")
str3 = ("white, "yellow", "1.24")

该函数只返回带有str2的颜色,它具有完全相同的项目,当子字符串(1.)在字符串(1.2或1.24)中时,有什么方法可以使函数返回颜色?

我也试过这个,但效果不好:

for colour, keywords in dict_colour.items():
    if all(kw in keywords['has'] for kw in str1 ) and not any(kw in keywords['hasnt'] for kw in str1):
          return colour

2 个答案:

答案 0 :(得分:0)

我假设您要测试str1中的所有字符串是否都显示为keywords['has']中字符串中的子字符串。

在这种情况下,您可以使用:

for colour, keywords in dict_colour.items():
    if all(any(keystring in kw for keystring in keywords['has']) for kw in str1 ) and not any(kw in keywords['hasnt'] for kw in str1):
        return colour

答案 1 :(得分:0)

这会将1.21.等视为相同的

def find_my_keyword(str1):
    dict_colour = {
        "y": {'has': ["yellow", "white", "green"], 'hasnt': []},
        "z": {'has': ["yellow", "white"], 'hasnt': ["green"]},
        "z2": {'has': ["yellow", "white", "1."], 'hasnt': ["green"]}}
    for colour, keywords in dict_colour.items():
        k_w = keywords["has"]
        if all(x in k_w or x.split(".")[0] + "." in k_w for x in str1):
            return colour
    return False

您只需要检查str1中的所有字词是否都在keywords["has"]中,如果它们都在keywords["hasnt"]

中就不存在

x.split(".")[0] + "."1.24更改为1.,以便在True

检查后返回1.