2016-04-29 15 views
0

我有一個數組。我爲WebSockets使用Tornado,我正在使用jsonPython中的字典中是否有私鑰?

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中沒有私人*任何東西*。 –

回答

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是'服務器['server1'] ['id1']' –

+0

'的關鍵我的意思是我仍然得到你的線路錯誤... –

+0

我的錯誤。我更新了以備將來參考。 –

相關問題