将列表附加为嵌套字典中的内部值 python

Appending list as inner value in nested dictionary python

我正在尝试用这种格式创建一个嵌套字典:

d3 = {'343564': {'32.cnt':['eeo', 'eec', 'vp3'],
               'avg.ps': ['cpt', 'vp3', 'ern']}}

这是我目前拥有的:

d2 = {}
for r,d,f in os.walk(path):
    for n in f:
        if n.endswith(('txt', 'sub','avg', 'dat')):
            pass
        if n.endswith('32.cnt'):
            split=n.split("_")
            d2.setdefault(split[3], []).append({split[-1]:split[0]})

但它 returns 这个:

{'343564': [{'32.cnt': 'eeo'},
  {'32.cnt': 'eec'},
  {'32.cnt': 'vp3'},
  {'avg.ps': 'cpt'},
  {'avg.ps': 'vp3'}
  {'avg.ps': 'ern}

如何将内部键 "collapse" 转换为 1 个键并从内部值创建一个列表?

我猜想有一种文件名格式与您正在尝试的一样:

from collections import defaultdict
from pprint import pprint
d2 = defaultdict(lambda:defaultdict(list))
for n in ['eeo_xxx_xxx_343564_32.cnt','eec_xxx_xxx_343564_32.cnt','vp3_xxx_xxx_343564_32.cnt',
          'cpt_xxx_xxx_343564_avg.ps','vp3_xxx_xxx_343564_avg.ps','ern_xxx_xxx_343564_avg.ps']:
    split=n.split("_")
    d2[split[3]][split[-1]].append(split[0])

pprint(d2)

输出:

{'343564': {'32.cnt': ['eeo', 'eec', 'vp3'],
            'avg.ps': ['cpt', 'vp3', 'ern']}}