我試圖建立一個解析器現在我的代碼部分看起來像這樣的最佳方式,以匹配字典值:Python。如果條件真
azeri_nums = {k:v for k,v in zip(range(1,10),("bir","iki","uc","dord","beş","altı","yeddi","səkkiz","doqquz"))}
russian_nums = {k:v for k,v in zip(range(1,10),("один","два","три","четыре","пять","шесть","семь","восемь","девять"))}
想象一下,我應該找到位,如果roomnum =「одна」 這裏是我嘗試匹配這樣的:
if roomnum.isalpha():
for key,value in azeri_nums.items():
if value.startswith(roomnum.lower()):
roomnum = str(key)
break
if roomnum.isalpha():
for key,value in russian_nums.items():
if value.startswith(roomnum.lower()):
roomnum = str(key)
break
是否有其他方法來做到這一點,將工作得更快,或者對於這種情況的一些最佳做法?
預先感謝您!
P.S. 該代碼工作的原因是該模塊僅從「одна」捕獲「од」,這就是爲什麼「один」.startswith(「од」)返回true。
看起來你應該有你的字典字符串映射到整數,而不是周圍的其他方式。 –
儘管你現在的代碼工作嗎?如果roomnum =「одна」,則「один」.startswith(roomnum.lower())'不會成立。 –
順便說一句,有一個更好的方法來構建這些字典,例如'字典(枚舉((「один」,「два」,「три」,「четыре」,「пять」,「шесть」,「семь」,「восемь」 ,「девять」),1))'。然而,正如Christofer Ohlsson&Nf4r所說,你可能應該交換你的鍵和值,例如枚舉({「k」,v「,」 「,」шесть「,」семь「,」восемь「,」девять「),1)}' –