Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将目录列表转换为列表_Python_List_Python 2.7_Dictionary - Fatal编程技术网

Python 将目录列表转换为列表

Python 将目录列表转换为列表,python,list,python-2.7,dictionary,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 谢谢你的帮助 names=[x['name']

我在此表单中有一个字段列表

fields = [{'name':'count', 'label':'Count'},{'name':'type', 'label':'Type'}]
我只想提取姓名并将其放入列表中。目前,我正在这样做:

names = [] 
for field in fields:
    names.append(field['name'])
有没有其他方法可以做同样的事情,不需要在列表中循环

我正在使用python 2.7


谢谢你的帮助

names=[x['name']表示字段中的x]
就可以了

如果列表
名称
已经存在,则:

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

您可以使用列表:

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

也许可以试试:

names = [x['name'] for x in fields]
例如:

>>> fields = [{'name':'count', 'label':'Count'},{'name':'type', 'label':'Type'}]
>>> [x['name'] for x in fields]
['count', 'type']
>>> a = [1, 2 ,3]
>>> map(a.append, [2 ,3, 4])
[None, None, None]
>>> a
[1, 2, 3, 2, 3, 4]
>>> l1 = ({'a':None}, None, {'a': 'aasd'})
>>> [x['a'] for x in l1 if (x and x['a'] and x['a'][0] == 'a')]
['aasd']

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

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

>>> fields = [{'name':'count', 'label':'Count'},{'name':'type', 'label':'Type'}]
>>> [x['name'] for x in fields]
['count', 'type']
>>> a = [1, 2 ,3]
>>> map(a.append, [2 ,3, 4])
[None, None, None]
>>> a
[1, 2, 3, 2, 3, 4]
>>> l1 = ({'a':None}, None, {'a': 'aasd'})
>>> [x['a'] for x in l1 if (x and x['a'] and x['a'][0] == 'a')]
['aasd']
编辑:

不知道为什么我没有提到
列表.扩展
,但这里有一个例子:

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']
例如:

>>> fields = [{'name':'count', 'label':'Count'},{'name':'type', 'label':'Type'}]
>>> [x['name'] for x in fields]
['count', 'type']
>>> a = [1, 2 ,3]
>>> map(a.append, [2 ,3, 4])
[None, None, None]
>>> a
[1, 2, 3, 2, 3, 4]
>>> 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的列表。

如果表单定义良好,意味着必须在每个dict中定义“名称”,那么您可以使用:

map(lambda x: x['name'], fields)
否则,您可以在提取之前使用
filter
,只是为了确保您没有得到
KeyError

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

这不会附加到
名称
中,而是创建所需的列表。我建议同样的解决方案。@BleedingFingers
names=[f['name']代表字段中的f]
@ReutSharabani:你看到OP代码中的
names=[]
行了吗?这是我们所得到的一切的一部分。@BleedingFingers然后使用
names+=[f['name']表示字段中的f]
map(names.append,[x['name']表示字段中的x])
是非常单一的。在OP正在使用的Python 2中,它创建并丢弃一个空列表,而在Python 3中它什么也不做。