从多个列表中获取特定的dict属性值

时间:2016-07-04 19:26:10

标签: python python-3.x

说我有一个看起来像这样的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

我该如何做到这一点?

3 个答案:

答案 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)

你也可以在功能上完全合并,mapitertools.chain.from_iterableoperator.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']