我正在寻找想法,指针,以帮助我得出一个解决方案,以防止以前的值被覆盖。我已经看到了一些列表的实现,但想看看,如果有更好的方法在那里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上有一百万个例子 –