看看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 的列表