将列表附加到词典中的列表上

2024-04-29 11:37:29 发布

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

我需要创建一个字典,其中值是列表列表:

for line in scenariofile:
    if re.match('^pppoe|^dhcp|^static|^sfu|^hgu', line):
        line = line.rsplit()
        print(line) # Just for debug
        scenariolist.update({line[0]: [].append(line)})

print(scenariolist)

这是输出:

['pppoe', '1001', 'jon', 'jon123']
['pppoe', '2000', 'joe', 'joe123']
['dhcp', '1001']
['dhcp', '1000']
['static', '1010', '192.168.2.40', '255.255.255.0', '192.168.2.1', '8.8.8.8', '8.8.4.4']
['sfu', '1001', 'untagged']
['hgu', '1001']

{'pppoe': None, 'dhcp': None, 'static': None, 'sfu': None, 'hgu': None}

所以,这些行有内容,但我不知道为什么它们没有作为列表中的值追加

我希望有这样的输出:

{'pppoe': [['pppoe', '1001', 'jon', 'jon123'], ['pppoe', '2000', 'joe', 'joe123']]... and so on

Tags: none列表forlinestaticdhcpprintjoe
2条回答

试试这个代码

for line in scenariofile:
    if re.match('^pppoe|^dhcp|^static|^sfu|^hgu', line):
        line = line.rsplit()
        print(line) # Just for debug
        if line[0] in scenariolist:
            scenariolist[line[0]].append(line)
        else:
            scenariolist.update({line[0]: [line]})
    

print(scenariolist)

您没有在字典中的列表中添加内容[].append(line)创建一个临时列表,附加到它,然后返回None,这个None值被放入字典中

为此,可以使用collections.defaultdict来创建包含所需列表的dictionary元素

from collections import defaultdict

scenariolist = defaultdict(list)
for line in scenariofile:
    if re.match('^pppoe|^dhcp|^static|^sfu|^hgu', line):
        line = line.rsplit()
        print(line) # Just for debug
        scenariolist[line[0]].append(line)

print(scenariolist)

相关问题 更多 >