簡體   English   中英

將詞典列表轉換為列表

[英]convert list of dicts to list

我有一個這種形式的字段列表

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

我想提取名稱並將其放入列表中。 目前,我這樣做:

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

還有另一種方法可以做同樣的事情,不涉及循環列表。

我正在使用python 2.7。

謝謝你的幫助。!

您可以使用列表理解:

>>> 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']

如果names已經存在,您可以映射 (以相同的方式創建names )以附加您創建的新列表的每個成員:

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

names = [x['name'] for x in fields]會這樣做。

如果列表names已存在,則:

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

如果表格定義明確,意思是,必須在每個字典中定義“名稱”,那么您可以使用:

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

否則,你可以在解壓縮之前使用filter ,只是為了確保你沒有得到KeyError

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM