我有一份字典的清单。是这样的。
'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
这里有一个简单的方法来做它使用递归为一个任意结构和深度数据集:
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']
这是不太干净,很难读,但,所以我会小心对待它的方式。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。