我有一些像这样的函数,输入是一个包含一些关键字(字符串)的列表,并返回更适合字典中所有关键字存储的键:
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
答案 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.2
和1.
等视为相同的
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.