说我有一个看起来像这样的Dict ......
values = {
'student': [{
'field': 'prefix',
'description': 'First name'
},
{
'field': 'suffix',
'description': 'Last name'
},
{
'field': 'student_email',
'description': 'Email address'
}],
'classes': [{
'field': 'course_code',
'description': 'Course code'
}]
}
我想要
['prefix', 'suffix', 'student_email', 'course_code']
但是我试图在循环中没有循环。
所以这就是我所拥有的:
stored = [] # store the field values in a list
for value in values:
stored.append(value['field'])
它在扔:
TypeError: string indices must be integers
我该如何做到这一点?
答案 0 :(得分:5)
您收到错误,因为字典比您的循环深一级,您可以在字典上调用items()
来获取值部分:
[v1['field'] for k, v in values.items() for v1 in v]
# ['prefix', 'suffix', 'student_email', 'course_code']
答案 1 :(得分:2)
如果您只需要在列表中收集这些字符串,但不限制按特定顺序排列它们,则应该可以使用:
>>> from itertools import chain
>>> [x['field'] for x in chain(*values.values())]
['course_code', 'prefix', 'suffix', 'student_email']
上面代码段的核心元素是函数itertools.chain()
。
答案 2 :(得分:1)
你也可以在功能上完全合并,map,itertools.chain.from_iterable和operator.itemgetter:
from operator import itemgetter
from itertools import chain
print(list(map(itemgetter("field"), chain.from_iterable(values.values()))))
['course_code', 'prefix', 'suffix', 'student_email']