Python字典:防止以前的值不被新值覆盖

2024-10-01 00:33:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找想法,指针,以帮助我达成一个解决方案,以防止以前的价值观被过度书写。我看到了一些列表实现,但是想看看是否有更好的方法

场景: 我想读一个Wireshark解码的文件,然后把信息放到Python字典中。我已经编写了代码,并开始将数据放入字典,从DNS数据开始,我已经在问题中包含了这些数据。 代码读入第一个DNS主机的数据并填充字典。现在,当涉及到第二个主机的标识“1”时,它会覆盖DNS数据值,包括主机标识字段。在

代码片段是

dictionarynetworkobject = {}
dictionarynetworkobject['DNS']['HostId'] = 0

但是

^{pr2}$

覆盖,主机ID为0的数据。同样的事情也发生在TCP序列ID和HTTP数据上。 我看了很多,但是没有找到一个更好的方法来添加,不同的值“主机号”、“TCP序列号”和“HTTP交易号”,在写入第一个值之后。在

我已经看过更新,方法,但它不起作用。我也试过了

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
________________________________________________________________________________

Tags: the数据方法代码treehttpdata字典
3条回答

您需要listdict

dictionarynetworkobject['DNS']['HostId'] = [] 
dictionarynetworkobject['DNS']['HostId'].append(0)

dictionarynetworkobject['DNS']['HostId'].append(1)

print(dictionarynetworkobject['DNS']['HostId'])
# [0, 1]

我想你在找这样的建筑,也许吧?在

dictionarynetworkobject['DNS']['HostId'] = {}
dictionarynetworkobject['DNS']['HostId'][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'}
dictionarynetworkobject['DNS']['HostId'][1] = {...}
dictionarynetworkobject['DNS']['HostId'][2] = {...}

据Python所知,您的代码只是将位置dictionarynetworkobject['DNS']['HostId']设置为新值,正如其他人所说,您需要做的是使该值成为一个列表,然后将新值附加到该列表中

相关问题 更多 >