2016-04-29 14 views
0

私は配列を持っています。 WebSocketにTornadoを使用しています。私はjsonを使用しています。Pythonで辞書に秘密鍵がありますか?

servers = { 
    'server1': { 
     'id1': { 
      'message': 'msg from id1', 
      'message2': 'msg2 from id1' 
      'conn': "(here's Tornado WebSocket class - WebSocket connection)" 
     }, 
     'id2': { 
       ... 
     } 
    }, 
    'server2': { 
     ... 
    } 
} 

私はすべてのユーザーにjson.dumps(servers['server1'])を送りたいが、私はconnキーでそれを送信する必要はありません。プライベート(非表示)キーのようなものがありますか?私はjson.dumps(servers['server1'])をしたいと私が欲しいの出力は次のようになります。

'id1': { 
    'message': 'msg from id1', 
    'message2': 'msg2 from id1' 
}, 
... 
+4

いいえ、あなたはキーを除いた辞書を作成する必要があります、その後、JSONを経由していることをダンプ。 – jonrsharpe

+1

Pythonにはprivate * anything *はありません。 –

答えて

1

:あなたは、ネストされた理解を使用することができます

conn_key = object() # sentinel value 

servers = { 
    'server1': { 
     'id1': { 
      'message': 'msg from id1', 
      'message2': 'msg2 from id1' 
      conn_key: "(here's Tornado WebSocket class - WebSocket connection)" 
     }, 
     'id2': { 
       ... 
     } 
    }, 
    'server2': { 
     ... 
    } 
} 

print servers['server1']['id1'][conn_key] 

json.dumps(servers, skipkeys=True) 
+0

参照:json.dumps({'test':json、 'abc':123}、skipkeys = True) –

+0

@SzymonMarczak:よく捕らえられました。 – Eric

3

いや、のpythonにはプライベートまたはパブリックの概念がありません。はい、あなたは文字列以外のキーでそれらをエミュレートすることができ

message = {id_key:{k:data for k,data in id_val.items() if k != 'conn'} 
    for id_key,id_val in servers['server1'].items()} 
+0

サーバ['server1']の鍵はid1、id2はconnではありません! connは 'servers ['server1'] ['id1']' –

+0

のキーです。私はまだあなたの行にエラーが発生することを意味します... –

+0

私の間違い。私は将来の参照のために更新しました。 –

関連する問題