Hal*_*Ali 8 python dictionary list python-2.7
我有一个这种形式的字段列表
fields = [{'name':'count', 'label':'Count'},{'name':'type', 'label':'Type'}]
Run Code Online (Sandbox Code Playgroud)
我想提取名称并将其放入列表中.目前,我这样做:
names = []
for field in fields:
names.append(field['name'])
Run Code Online (Sandbox Code Playgroud)
还有另一种方法可以做同样的事情,不涉及循环列表.
我正在使用python 2.7.
谢谢你的帮助.!
Hyp*_*eus 10
您可以使用列表理解:
>>> fields = [{'name':'count', 'label':'Count'},{'name':'type', 'label':'Type'}]
>>> [f['name'] for f in fields]
['count', 'type']
Run Code Online (Sandbox Code Playgroud)
看看列表理解
也许试试:
names = [x['name'] for x in fields]
Run Code Online (Sandbox Code Playgroud)
例:
>>> fields = [{'name':'count', 'label':'Count'},{'name':'type', 'label':'Type'}]
>>> [x['name'] for x in fields]
['count', 'type']
Run Code Online (Sandbox Code Playgroud)
如果names已经存在,您可以映射(以相同的方式创建)以附加您创建的新列表的每个成员:
map(names.append, [x['name'] for x in fields])
Run Code Online (Sandbox Code Playgroud)
例:
>>> a = [1, 2 ,3]
>>> map(a.append, [2 ,3, 4])
[None, None, None]
>>> a
[1, 2, 3, 2, 3, 4]
Run Code Online (Sandbox Code Playgroud)
编辑:
不知道为什么我没有提到list.extend,但这是一个例子:
names.extend([x['name'] for x in fields])
Run Code Online (Sandbox Code Playgroud)
或者只是使用+运营商:
names += [x['name'] for x in fields]
Run Code Online (Sandbox Code Playgroud)
你也可以使用if你想要的语句过滤"动态" :
names = [x['name'] for x in fields if x and x['name'][0] == 'a']
Run Code Online (Sandbox Code Playgroud)
例:
>>> l1 = ({'a':None}, None, {'a': 'aasd'})
>>> [x['a'] for x in l1 if (x and x['a'] and x['a'][0] == 'a')]
['aasd']
Run Code Online (Sandbox Code Playgroud)
这将生成一个名称以'a'开头的所有x的列表
| 归档时间: |
|
| 查看次数: |
4984 次 |
| 最近记录: |