2017-10-21 4 views
-1

I docoptから次のdictあります開梱作業が、間違った値を持つ

password, queues, db, module, host, port = my_dict 
print password 
print queues 
print db 
print module 
print host 
print port 

出力が間違って次のようになります:

password 
queues 
db 
module 
host 
port 

{'password': "''", 'queues': None, 'db': '0', 'module': None, 'host': '127.0.0.1', 'port': '20'} 

を、私はそれを解凍しようとすると、

値ではなくキーを印刷しています。本当に奇妙です。

+0

は、残念ながら、あなたが取得するつもりはありません非常に遠い辞書を展開すると、デフォルトでキーの繰り返しが行われるため、キーの展開が終了します。さらに、辞書が順序付けされていないので、適切なキーが対応する名前付き変数の中で終わったことを自分自身が幸運であると考えるべきです。 –

+0

dictのキーと同じ名前の変数を取得しようとしていますか?これはどのように動作するのではありません。 –

+0

ディクショナリを反復するとyesとなるキーが生成され、一連のターゲットには繰り返しが使用されるため、キーだけが得られます。 'list(my_dict)'を使った場合も同じことが起こります。また、辞書は*順不同です*特定の順序で返されるキーと値に依存することはできません。 –

答えて

0

あなたは自分のdictionaryvaluesアウトprintにしたい場合はdictionaryを開梱すると、あなたのkeys、ないvalues ...

を与える、あなただけfor-loopvalues方法を使用することができます。

d = {'password': "''", 'queues': None, 'db': '0', 'module': None, 'host': '127.0.0.1', 'port': '20'} 

for v in d.values(): 
    print(v) 

れますoutput

'' 
127.0.0.1 
0 
20 
None 
None 

これを行うと、私の意見ではあなたのがもっときれいになりますし、実際にはprintvaluesではなく、keysと言いました。

**更新

私はので、私は、私はそれを明確にするために、以下を追加しようと思いましたあなたのコメントを見ました。

次の例のように、dictionariesを解凍することができます

a, b, c = {'cat': 3, 'dog': 5, 'fish': 7} 

と今abcはそれぞれ'cat''dog''fish'が含まれています。ただし、dictionaryが左側の変数と異なるサイズの場合は、tuples,listsまたは他のiterableを開梱する場合と同じです。これは、異なるサイズに解凍できないため、errorとなります。

更新

レティが指摘したように、dictionariesを注文されていないので、あなたが上記の操作を行うとvariablesに割り当てるとしたら、あなたはそれに頼ることができませんでした。

すべてでは、あなたが達成しようとしていることは、非常にpythonicではありません。 variablesを動的に作成する代わりに、dictionaryからvaluesにアクセスしてください(例:d['password'])。あなたはちょうどprintそれらを望んでいないと主張するが、各valueに変数を割り当てた場合

最後に、あなたはおそらく、直接それをやってオフ最善のようになります。

password, queues, db, module, host, port = my_dict['password'], my_dict['queues'], my_dict['db'], my_dict['module'], my_dict['host'], my_dict['port'] 
+0

ディクショナリの順不同で、アンパックに 'dict.keys()'や 'dict.values()'に依存してはいけません。 – Reti43

+0

@ Reti43私はこれを言及する答えを更新します! –

関連する問題