真の条件は次のように見える場合の最善の方法は、辞書の値と一致します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. このコードがモジュール "re"を "одна"から "од"だけキャプチャして動作する理由は、 "один" .startswith( "од")がtrueを返す理由です。
あなたの辞書が他の方法で回避int型に文字列をマップではなく、持っている必要がありますように見えます。 –
あなたの現在のコードは機能しますか? roomnum = "одна"なら ''один ".startswith(roomnum.lower())'は真ではありません。 –
ところで、これらのdictsを構築するためのより良い方法があります。たとえば、 'dict(列挙する(列挙する("ддрен "、"два "、"три "、"четыре "、"пять "、"шесть "、"семь "、"восемь " 、 "девять")、1)) '。しかし、Christofer Ohlsson&Nf4rが言っているように、あなたはおそらくあなたのキーと値を入れ替えるべきでしょう。例えば、 '{k:v for、enumerate(" "диа"、 "три"、 "четыре"、 "пять "、"шесть "、"семь "、"восемь "、"девять ")、1)}' –