辞書から決まった順番で値取りたい

2012-03-27 | Python | コメントはまだありません

追記:この例は致命的にダメでした(→昨日のコードほんとに速いか?)

多言語対応の一環。そう、あたしはまだこんなところで足踏みしていたのれす。

lang_list =  ['en','ja','es','fr','it','ru','nl','tw','cn','kr',]

a = {}
a['cn'] = u"ちゅごくごでもんく"
a['fr'] = u"ふらんすごでもんく"
a['tw'] = u"たいわんごでもんく"
a['ja'] = u"にぽんごでもんく"

こんなときに、aは辞書だから順番不定じゃん。
でもlang_listに定義してる順番で値を取りたい。
つまりlang_listの順番は、辞書aから取得したいキーの優先順位なのだわ。
英語(en)の値があるか見て、無ければ日本語(ja)、無ければスペイン語(es)……というような。この場合なら、日本語が優先順位いちばんめとして返ってくるというイメージです。
くるくる回せばいいんだけど、なんかアレな気がして、もうちっと気の利いた書き方があるんでないかと考えていたというわけです。
mapとかつかうのか?なんかかっこよくババンとやる方法が!?順序付き辞書とかか!?とかもう色々考えたよ。こんなちっさい仕掛けのためにさ。
おまけに使う予定はあんまりない。くるくる回す書き方にして前進んだらいいんだわ。愚かだわ。
でもおもいついたので書いとく。

k = [x for x in lang_list if x in list(a.keys())][0]
print(a[k])
>>> にぽんごでもんく

賢い使い方になっているのかは自信ないんだけど、さしあたりまとまった感じにはなった。
MongoDBのi18nは、決まった言語で値取りそこねるとNone返すので、いやNoneじゃなくて最大限努力してなんか保存されてる値を返したいんだというときには、なんかこんなことやんないとだめかなって。

リスト内包表記の、最も単純なカタチはいいんですが、後ろにもういっこforだのifだの並べたやつの読解が苦手で往生してたんです。
そこに関しては得心がいったというか、やっぱこうなんというか、自分に需要のある何かを通してでないと理解むつかしいですね。具体例がないと。

About Author

about author

Halipeco

UO@倭国、EQ@Xegony、DOL@乙鯖を経てFF14のアトモスに生息中。
仕事と趣味でPython書いてる。
買った果物に種があると植えるのが趣味。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です