作者: 機械伯爵
日時: 2005/11/22(11:26)
 機械です。どうも毎度ありがとうございます。

 文字の修正はしておきました(細かい突っ込みは有難いです)

> 純粋に質問です。
> 
> in だと リストかジェネレータが相手になると思うんですが、
> has_keyはそういうことないんですかね? それとも inでも
> 違う?

 えっと、質問の意味がわかんないのですが、has_keyはマッピング
専用の関数ですし、そもそもリストやジェネレータには「長さ」さえ
あれば、そこまでの数値しかないわけですし・・・

 keys()で得られるのはキーのリストですから、inは………

 ………と、もしかして………

>>> d=dict([(x,x*100)for x in range(5)])
>>> d
{0: 0, 1: 100, 2: 200, 3: 300, 4: 400}
>>> 1 in d
True
>>> 100 in d
False
>>>

 うぁ………keys()って必要ありませんでした(汗)

 マッピングにそのままinを使うと、そーいえばkeyのシーケンス
として扱うでしたっけ(for -- inはそうですから)

 has_keyもあまり使い方ありませんね(汗)

※入門者用には……言うべきか言わぬべきか………

654もついでに…
> 辞書からキーを検索するのは簡単にできますが、値を
> 検索するのはなめていかないとできませんよね?
> 逆方向の辞書でもない限り。

 valuesの中にあるか無いかを拾うだけなら、

value in dict.values()

 や

value in dict.itervalues()

 が使えますが、値は重複が可能なので、値に対応するキーを
拾おうと思ったら、なめるしか無いですね(それっぽいメソッド
は無いみたいですし)

<ある値のキーを拾い出す>
>>> d = dict([(x,(x % 3))for x in range(10)])
>>> d
{0: 0, 1: 1, 2: 2, 3: 0, 4: 1, 5: 2, 6: 0, 7: 1, 8: 2, 9: 0}
>>> [x for x in d if d[x] == 0]
[0, 3, 6, 9]
>>>

 こっちこそ、拡張機能が要るかも………

 /機械伯爵/←修行が足りんわっ!/