да, есть.Вы должны избегать проверки, если строка содержит строку, а сосредоточиться на строке равенство .
Как только вы согласитесь на равенство, это означает, что вы можете создать набор с известными ключевыми словами, разделитьв соответствии с =
и проверьте, содержит ли набор ваше значение (используя O(1)
lookup):
key_set = {"fgddd","#j"}
for st in cn:
if '=' in st:
key,value = st.split("=",1)
if key in key_set:
el = value.strip()
yield float(el)
, если у вас есть разные типы, используйте словарь для преобразования в правильный тип в соответствии с ключом
key_set = {"fgddd":float ,"#j": float, "whatever":int , "something":str}
for st in cn:
if '=' in st:
key,value = st.split("=",1)
if key in key_set:
el = value.strip()
yield key_set[key](el) # apply type conversion
обратите внимание, что если вам не нужно преобразование, str
выполнит работу так, как она вернет себя, когда передаст строку.
последнее примечание: если у вас есть право голосаФормат ввода, предложите использовать json
вместо пользовательского формата.Разбор становится тривиальным с использованием модуля json
, и фильтрация может быть достигнута так же, как я показал.