更改New\u dictionary中键的名称,其中New\u dictionary作为主\u dictionary的值

2024-10-08 23:28:12 发布

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

我有一本字典:(键是'name',值是other dictionary)

dictionary = {'subnet 10.5.5.0 netmask 255.255.255.224': 
                         {'option-domain-name': '"internal.example.org"',
                         'option-domain-name-servers': 'ns1.internal.example.org',
                         'range': '10.5.5.26 10.5.5.30', 'max-lease-time': '7200', 
                         'default-lease-time': '600', 'option-routers': '10.5.5.1',
                         'option-broadcast-address': '10.5.5.31'},
              'subnet 10.254.239.32 netmask 255.255.255.224': 
                         {'range': 'dynamic-bootp 10.254.239.40 10.254.239.60',
                          'option-routers': 'rtr-239-32-1.example.org', 
                          'option-broadcast-address': '10.254.239.31'}, 
              'subnet 10.254.239.0 netmask 255.255.255.224': 
                         {'range': '10.254.239.10 10.254.239.20',
                          'option-routers': 'rtr-239-0-1.example.org, rtr-239-0-     
                           2.example.org'}, 
              'host fantasia': {'hardware': 'ethernet 08:00:07:26:c0:a5', 
                                'fixed-address': 'fantasia.fugue.com'}, 
              'host passacaglia': {'hardware': 'ethernet 0:0:c0:5d:bd:95',
                                   'server-name': '"toccata.fugue.com"',
                                   'filename': '"vmunix.passacaglia"'}
         }

我所要做的就是每一次改变 '选项-'用于'option'

dictionary = {'subnet 10.5.5.0 netmask 255.255.255.224': {'option domain-name': '"internal.example.org"', 'option domain-name-servers': 'ns1.internal.example.org', 'range': '10.5.5.26 10.5.5.30', 'max-lease-time': '7200', 'default-lease-time': '600', 'option routers': '10.5.5.1', 'option broadcast-address': '10.5.5.31'}, 'subnet 10.254.239.32 netmask 255.255.255.224': {'range': 'dynamic-bootp 10.254.239.40 10.254.239.60', 'option routers': 'rtr-239-32-1.example.org', 'option broadcast-address': '10.254.239.31'}, 'subnet 10.254.239.0 netmask 255.255.255.224': {'range': '10.254.239.10 10.254.239.20', 'option routers': 'rtr-239-0-1.example.org, rtr-239-0-2.example.org'}, 'host fantasia': {'hardware': 'ethernet 08:00:07:26:c0:a5', 'fixed-address': 'fantasia.fugue.com'}, 'host passacaglia': {'hardware': 'ethernet 0:0:c0:5d:bd:95', 'server-name': '"toccata.fugue.com"', 'filename': '"vmunix.passacaglia"'}}

我该怎么做?你知道吗


Tags: nameorgtimeaddressexampledomainrangeinternal
1条回答
网友
1楼 · 发布于 2024-10-08 23:28:12
for subdict in dictionary.values():
    for key, val in subdict.items():
        if key.startswith('option-'):
            del subdict[key]
            subdict[' '.join(key.split('-', 1))] = val

因此,对于每个包含的dict,循环它的项,如果键以option-开头,则从字典中删除该键,并将值存储在一个新键下,删除破折号。你知道吗

演示:

>>> from pprint import pprint
>>> dictionary = {'subnet 10.5.5.0 netmask 255.255.255.224': {'option-domain-name': '"internal.example.org"', 'option-domain-name-servers': 'ns1.internal.example.org', 'range': '10.5.5.26 10.5.5.30', 'max-lease-time': '7200', 'default-lease-time': '600', 'option-routers': '10.5.5.1', 'option-broadcast-address': '10.5.5.31'}, 'subnet 10.254.239.32 netmask 255.255.255.224': {'range': 'dynamic-bootp 10.254.239.40 10.254.239.60', 'option-routers': 'rtr-239-32-1.example.org', 'option-broadcast-address': '10.254.239.31'}, 'subnet 10.254.239.0 netmask 255.255.255.224': {'range': '10.254.239.10 10.254.239.20', 'option-routers': 'rtr-239-0-1.example.org, rtr-239-0-2.example.org'}, 'host fantasia': {'hardware': 'ethernet 08:00:07:26:c0:a5', 'fixed-address': 'fantasia.fugue.com'}, 'host passacaglia': {'hardware': 'ethernet 0:0:c0:5d:bd:95', 'server-name': '"toccata.fugue.com"', 'filename': '"vmunix.passacaglia"'}}
>>> for subdict in dictionary.values():
...     for key, val in subdict.items():
...         if key.startswith('option-'):
...             del subdict[key]
...             subdict[' '.join(key.split('-', 1))] = val
... 
>>> pprint(dictionary)
{'host fantasia': {'fixed-address': 'fantasia.fugue.com',
                   'hardware': 'ethernet 08:00:07:26:c0:a5'},
 'host passacaglia': {'filename': '"vmunix.passacaglia"',
                      'hardware': 'ethernet 0:0:c0:5d:bd:95',
                      'server-name': '"toccata.fugue.com"'},
 'subnet 10.254.239.0 netmask 255.255.255.224': {'option routers': 'rtr-239-0-1.example.org, rtr-239-0-2.example.org',
                                                 'range': '10.254.239.10 10.254.239.20'},
 'subnet 10.254.239.32 netmask 255.255.255.224': {'option broadcast-address': '10.254.239.31',
                                                  'option routers': 'rtr-239-32-1.example.org',
                                                  'range': 'dynamic-bootp 10.254.239.40 10.254.239.60'},
 'subnet 10.5.5.0 netmask 255.255.255.224': {'default-lease-time': '600',
                                             'max-lease-time': '7200',
                                             'option broadcast-address': '10.5.5.31',
                                             'option domain-name': '"internal.example.org"',
                                             'option domain-name-servers': 'ns1.internal.example.org',
                                             'option routers': '10.5.5.1',
                                             'range': '10.5.5.26 10.5.5.30'}}

相关问题 更多 >

    热门问题