首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从字典列表中创建一个字典,使字典中的相同值成为关键字,这些值是剩下的项

从字典列表中创建一个字典,使字典中的相同值成为关键字,这些值是剩下的项
EN

Stack Overflow用户
提问于 2018-08-08 17:49:21
回答 1查看 33关注 0票数 0

在给定的字典中,我们使用labelparent_labelurl作为关键字。相同的parent_label应该包含[label,url]。如果parent_label重复,则应附加该特定parent_label[label, url]

输入是

代码语言:javascript
复制
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'}]

输出应该如下所示:

代码语言:javascript
复制
{'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'],....]

我试过这样做:

代码语言:javascript
复制
for i in top:
    if i['parent_label'] in k.keys():
        k[i['parent_label']] = [[i['label'],i['url']]]

我的o/p是:

代码语言:javascript
复制
 {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']]}

伙计们,请帮帮我。谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-08-08 17:55:18

这似乎是defaultdict的工作:它的行为类似于一个字典,但如果您访问一个从未设置过的元素,它不会引发错误,而是在第一次访问时将其设置为所选默认对象(这里是list)的实例。

在您的案例中,问题在于当您想要添加一个元素时,您会覆盖与最终dict中的键相关联的内容。你可能正在寻找类似这样的东西:

代码语言:javascript
复制
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)

结果:

代码语言:javascript
复制
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']]})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51743607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档