将词典列表转换为列表

时间:2014-01-02 20:20:47

标签: python list python-2.7 dictionary

我有一个这种形式的字段列表

fields = [{'name':'count', 'label':'Count'},{'name':'type', 'label':'Type'}]

我想提取名称并将其放入列表中。目前,我这样做:

names = [] 
for field in fields:
    names.append(field['name'])

还有另一种方法可以做同样的事情,不涉及在列表中循环。

我正在使用python 2.7。

感谢您的帮助。

4 个答案:

答案 0 :(得分:10)

您可以使用列表理解:

>>> fields = [{'name':'count', 'label':'Count'},{'name':'type', 'label':'Type'}]
>>> [f['name'] for f in fields]
['count', 'type']

答案 1 :(得分:5)

查看list comprehensions

也许试试:

names = [x['name'] for x in fields]

示例:

>>> fields = [{'name':'count', 'label':'Count'},{'name':'type', 'label':'Type'}]
>>> [x['name'] for x in fields]
['count', 'type']

如果names已经存在,您可以map(以相同方式创建)以附加您创建的新列表的每个成员:

map(names.append, [x['name'] for x in fields])

示例:

>>> a = [1, 2 ,3]
>>> map(a.append, [2 ,3, 4])
[None, None, None]
>>> a
[1, 2, 3, 2, 3, 4]

修改

我不确定为什么我没有提及list.extend,但这是一个例子:

names.extend([x['name'] for x in fields])

或只是使用+运算符:

names += [x['name'] for x in fields]

您也可以使用if语句“动态”过滤,就像您期望的那样:

names = [x['name'] for x in fields if x and x['name'][0] == 'a']

示例:

>>> l1 = ({'a':None}, None, {'a': 'aasd'})
>>> [x['a'] for x in l1 if (x and x['a'] and x['a'][0] == 'a')]
['aasd']

将生成名称以“a”

开头的所有x-s的列表

答案 2 :(得分:1)

names = [x['name'] for x in fields]会这样做。

如果列表names已经存在,那么:

names += [x['name'] for x in fields]

答案 3 :(得分:0)

如果表格定义明确,意思是,必须在每个字典中定义“名称”,那么您可以使用:

map(lambda x: x['name'], fields)

否则,您可以在提取之前使用filter,以确保您没有获得KeyError

map(lambda x: x['name'], filter(lambda x: x.has_key('name'), fields))