Python 从字典列表中生成一个dict,这样字典中的相同值将成为键,这些值是剩下的项

Python 从字典列表中生成一个dict,这样字典中的相同值将成为键,这些值是剩下的项,python,dictionary,Python,Dictionary,在给定的字典中,我们有label,parent\u label和url作为键。相同的父标签应包含[标签,url]。如果父标签重复,则应附加该特定父标签的[label,url] 输入是 top = [{u'label': u'Square HSS Tool Bits', u'parent_label': u'Lathe Tools', u'url': u'/hss-tools/hss-square-tool-bits'}, {u'label': u'

在给定的字典中,我们有
label
parent\u label
url
作为键。相同的
父标签
应包含
[标签,url]
。如果
父标签
重复,则应附加该特定
父标签
[label,url]

输入是

top = [{u'label': u'Square HSS Tool Bits',
        u'parent_label': u'Lathe Tools',
        u'url': u'/hss-tools/hss-square-tool-bits'},
        {u'label': u'HSS Tapped Punches',
        u'parent_label': u'Press Tools',
        u'url': u'/hss-tapped-punches'},
       {u'label': u'Carbide Radius End Mills',
       u'parent_label': u'Milling Tools',
       u'url': u'/carbide-radius-end-mills'},
       {u'label': u'HSS Mini Straight Punches',
       u'parent_label': u'Press Tools',
       u'url': u'/hss-mini-straight-punches'},
       {u'label': u'Carbide Square Tool Bits',
       u'parent_label': u'Lathe Tools',
       u'url': u'/carbide-square-tool-bits'},
       {u'label': u'HSS Center Drill Bits',
       u'parent_label': u'Drilling Tools',
       u'url': u'/hss-tools/hss-center-drill'},
       {u'label': u'Rectangular HSS Tool Bits',
        u'parent_label': u'Lathe Tools',
        u'url': u'/rectangular-hss-tool-bits'},
        {u'label': u'News', u'parent_label': u'About Us', u'url': 
        u'/news'}]
输出应该如下所示:

{'Lathe Tools' : [[u'Square HSS Tool Bits',u'/hss-tools/hss-square- 
    tool-bits'],[u'Rectangular HSS Tool Bits',u'/rectangular-hss-tool-bits']],
'Press Tools':[['HSS Tapped Punches',u'/hss-tapped-punches'],[u'HSS Mini Straight Punches',u'/hss-mini-straight-punches'],....]
我试过:

for i in top:
    if i['parent_label'] in k.keys():
        k[i['parent_label']] = [[i['label'],i['url']]]
我的o/p是:

 {u'About Us': [[u'News', u'/news']],
 u'Drilling Tools': [[u'HSS Center Drill Bits',
 u'/hss-tools/hss-center-drill']],
 u'Lathe Tools': [[u'Rectangular HSS Tool Bits',
  u'/rectangular-hss-tool-bits']],
 u'Milling Tools': [[u'Carbide Radius End Mills',
 u'/carbide-radius-end-mills']],
 u'Press Tools': [[u'HSS Mini Straight Punches',
  u'/hss-mini-straight-punches']]}
请帮帮我,伙计们。
谢谢

看来这是一份属于
defaultdict
的工作: 它的作用类似于字典,但如果您访问从未设置的元素,它不会引发错误,而是在第一次访问时将其设置为所选默认对象的实例(这里是
列表

本例中的问题是,当您要添加元素时,您会覆盖与最终
dict
中的键相关联的内容。 您可能正在寻找类似的内容:

from collections import defaultdict
result = defaultdict(list)
for d in top:
    result[d[u'parent_label']].append([d[u'label'], d[u'url']])
print(result)
结果:

defaultdict(list,
            {'About Us': [['News', '/news']],
             'Drilling Tools': [['HSS Center Drill Bits',
               '/hss-tools/hss-center-drill']],
             'Lathe Tools': [['Square HSS Tool Bits',
               '/hss-tools/hss-square-tool-bits'],
              ['Carbide Square Tool Bits', '/carbide-square-tool-bits'],
              ['Rectangular HSS Tool Bits', '/rectangular-hss-tool-bits']],
             'Milling Tools': [['Carbide Radius End Mills',
               '/carbide-radius-end-mills']],
             'Press Tools': [['HSS Tapped Punches', '/hss-tapped-punches'],
              ['HSS Mini Straight Punches', '/hss-mini-straight-punches']]})