我正在尋找想法,指針,以幫助我得出一個解決方案,以防止以前的值被覆蓋。我已經看到了一些列表的實現,但想看看,如果有更好的方法在那裏Python字典:防止以前的值不被新值覆蓋
場景: 我想讀一個Wireshark解碼文件並將其放入一個Python字典。我編寫了代碼,並開始將數據放入字典中,從DNS數據開始,這些數據已包含在問題中。 代碼讀入第一個DNS主機的數據並填充字典。現在說到第二個Host_Id,「1」,它會覆蓋DNS數據值,包括Host_Id字段。
代碼的片段是
dictionarynetworkobject = {}
dictionarynetworkobject['DNS']['HostId'] = 0
然而,
dictionarynetworkobject['DNS']['HostId'] = 1
重寫,用於HOSTID = 0同樣的事情數據是發生於,TCP_Seq_ID和HTTP數據。 但是,我看了很多,沒有找到更好的方法來添加「Host_Id」,「TCP_Seq_ID」和「HTTP_Transaction_id」的不同值,以寫入第一個值之後。
我看了更新,方法,但它不會工作。另外,我試過
from collections import defaultdict
def tree(): return defaultdict(tree)
dictionarynetworkobject = tree()
但是這也行不通。我想在這件事上挑選團隊的大腦。下面是結構,我想實現。
networList = {
'DNS':
{
'Host_Id' :
{
{ '0': {'Local_Time':2015-10-02 17:20, 'DNS_Time': 2015-10-02 17:20, 'Num_Bytes':265, 'IP':1.2.3.4,'IPMODE':IPV4}},
{ '1': {<-OverWriting the Previous Data->}},
{ '2': {<-OverWriting the Previous Data->}},
{ '3': {<-OverWriting the Previous Data->}}
}
}
'TCP': {
'TCP_SEQ_NO': {
{'0': {TCP network data}},
{'2': {TCP network data}},
{'3': {TCP network data}},
{'4': {TCP network data}}
}
},
'HTTP': { 'HTTP_Transaction_id': {
{'0': {HTTP data}},
{'1': {HTTP data}},
{'2': {HTTP data}},
{'3': {HTTP data}}
}
}
}
________________________ Data for the DNS ____________________________________
Local_Time Host_Id DNS_Time Num_Bytes IP IPMODE
2015-10-02 17:20 0 2015-10-02 17:20 265 1.2.3.4 IPV4
2015-10-02 17:20 1 2015-10-02 17:20 106 5.6.7.8 IPV4
2015-10-02 17:20 2 2015-10-02 17:20 912 8.7.6.5 IPV4
2015-10-02 17:20 3 2015-10-02 17:20 913 4.3.2.1 IPV4
________________________________________________________________________________
您想要一個collections.defaultdict,如果您有搜索,SO上有一百萬個例子 –