2011-11-01 38 views
2

辞書からいくつかの値を取得しようとしていますが、かなり簡単です。Python:変数付き辞書の印刷

何らかの理由で、変数を使用して値を取得することはできません。

dMap = { 12345678: 'username' } 
qDict['12345678'] = {'used': '4204224', 'grace': 'none', 'quota': '5242880'} 

は明らかに、より多くのがあります:>(getentをpasswdを経由して)ユーザ名、および基本的には各キーの辞書を含む第2の辞書、 -

は、私は2つの辞書、のUIDのマッピングを持つものを持っています両方のディクショナリの値ですが、ここで示した構造が基本的な概念です。

彼らはqDictは私が従っている悩みを抱えている(DMAP辞書を経由してマッピングする必要があります)UID

なりのキー:私は、スクリプトを実行すると

for k,v in dMap.items(): 
    print 'Key: ',k 
    print qDict[k] 

、私は取得:私はコメントアウトした場合

Traceback (most recent call last): 
    File "./test.py", line 156, in ? 
    main() 
    File "./test.py", line 98, in main 
    print qDict[k] 
KeyError: 26617862 

:上記qDict [k]の行を印刷し、そして唯一のkの値を印刷し、キー名は問題なく印刷されます。 、私は何をしようとしていることはループに指定されたキー名用の辞書を印刷だけを持っている

print dMap[26617862]   # this works! 
print qDict['26617862']  # this works!  #NOTE BELOW 

印刷の種類を:私はまた、実際のキー名(12345678)とのforループの外で辞書を参照することができます辞書の辞書...

私が問題と思うのは、(#NOTE BELOWの行を見ると)何らかの形で正しい形式の変数で辞書(qDict)を提示する必要があります。

ここに紛失しているものがあるのですか、これを行う簡単な方法がありますか?

PS:私もdMap.keysでループのために試してみた()など

答えて

0

dMapのキーは整数ですが、qDictにキーが文字列です。

あなたはqDictでキーとしてそれを使用する前に、文字列にあなたの整数kを変換する必要があります。

for k in dMap: 
    print 'Key: ',k 
    print qDict[str(k)] 
+0

はい、これはまさにそれでした! 私は最近、perlから来ていますが、これらの同じ種類の問題は覚えていませんが、間違っている可能性があります。 ありがとうございました。 – billnted

1

あなたはキーの異なる種類を使用して2つの辞書を構築しました。 1つの辞書には整数キーがあり、もう1つには文字列キーがあります。

@Mark Byersによると、整数を文字列に変換してルックアップを行うことができます。

しかし、代わりにqDictを整数キーで作成することをお勧めします。どこのコードでもqDictを構築する場合は、キーをint()にラップして強制的に整数キーにします。

いずれにしても、本当にうまくいくでしょう。しかしdMapintのキーがあり、qDictのキーがstrの場合qDictに表示されるキーはdMapには表示されません。一致するキーが同じタイプのものであれば良いでしょう。そしてintはやや効率的なはずです。プログラムが大きくなると、より良い選択になります。

+0

Steveさん、ありがとう、私は両方のキーを共通のフォーマットに変換します。この場合、辞書を作成するために使用した入力ファイルからいくつかのガベージを整理する必要があるため、stringを使用します。 – billnted