読者です 読者をやめる 読者になる 読者になる

辞書でvalueからkeyを引く

valueが数値のとき,
「valueがもっとも小さいものから5つkeyが知りたい」
「valueがもっとも大きいものから5つkeyが知りたい」
という場合.*1

testdic = {'hoge':5, 'fuga':50, 'piyo':25}
testlist = zip(testdic.keys(), testdic.values())
#[('fuga', 50), ('piyo', 25), ('hoge', 5)]
testlist.sort(lambda a, b: cmp(a[1], b[1]))
#[('hoge', 5), ('piyo', 25), ('fuga', 50)]

もっと簡単にもかけるようです.(コメントでアドバイスいただきました)

testdic = {'hoge':5, 'fuga':50, 'piyo':25}
testlist = testdic.items()
#[('fuga', 50), ('piyo', 25), ('hoge', 5)]
testlist.sort(key=lambda a: a[1])
#[('hoge', 5), ('piyo', 25), ('fuga', 50)]

(うーん,items()とかいつも使っているのに,不覚...)

あとはスライシングするとか.

for k, v in testlist[:2]:
    print k

とかとか.
たまーにvalueからkeyを引きたいんだけど,
どうしようと思うときがあるのでめもめも.

*1:任意のvalueをもつkeyが複数有る場合は知らない