开发者社区> 问答> 正文

从字典列表中提取值;具有相同的键,但每个列表的值不同

我有一份字典的清单。是这样的。

'authors':  [
                [
                    {
                        'name':  'ABC',
                         'ids':  [
                            '144548847'
                        ],
                    }
                     {
                        'text':  'ABC',
                         'fragments':  [

                        ]
                    }
                ],
                 [
                    {
                        'name':  'XYZ',
                         'ids':  [
                            '145715698'
                        ],
                         'slug':  'Xy-z'
                    },
                     {
                        'text':  'X.y.Z',
                         'fragments':  [

                        ]
                    }
                ]
            ]

我想提取所有作者的“姓名”(可能有两个以上的作者)。 我只能通过做这个来获得“ABC”。

for values in results:
    "Author(s) :",values['authors'][0][0]['name']

这里的结果是主字典,它的值是字典列表,我想从那个字典中拉出作者的名字。 我试着做下面,但它给我的类型错误:列表索引必须是整数或切片,而不是str

for values in results:
        "Author(s) :",values['authors'][0][0:]['name']

问题来源StackOverflow 地址:/questions/59380405/extract-values-from-lists-of-dictionaries-with-same-keys-but-different-values

展开
收起
kun坤 2019-12-28 14:19:13 414 0
1 条回答
写回答
取消 提交回答
  • 这里有一个简单的方法来做它使用递归为一个任意结构和深度数据集:

    def traverse(x):
        if isinstance(x, list):
            for v in x:
                traverse(v)
        elif isinstance(x, dict):
            if 'name' in x:
                authors.append(x['name'])
            else:
                for v in x.values():
                    traverse(v)
    
    >>> authors = []
    >>> traverse(values['authors'])
    
    >>> print(authors)
    ['ABC', 'XYZ']
    

    为了使它更好、更通用,您可以将全局列表作者更改为局部变量,并创建它,然后在递归中传递。如果您需要这个功能,我将把这个练习留给您。 编辑:只使用列表理解:

    >>> [y.get('name') for x in values['authors'] for y in x if y.get('name')]
    ['ABC', 'XYZ']
    

    这是不太干净,很难读,但,所以我会小心对待它的方式。

    2019-12-28 14:19:21
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载