[英]Python: create a list containing dicts
你怎么把這個字符串:
str='ldap:alberthwang,eeid:67739|ldap:meng,eeid:107,building:CL5'
到一個列表,給你這個:
print x[1]['building']=CL5
可能是:
x=[{'ldap':'alberthwang','eeid':'67739'},{'ldap':'meng','eeid':'107','building':'CL5'}]
我試過先分割字符串並追加到列表中:
sample=[]
for s in str.split('|'):
sample.append(s)
但是我仍然堅持如何將列表項轉換成字典,然后可以用來填充另一個列表。
text='ldap:alberthwang,eeid:67739|ldap:meng,eeid:107,building:CL5'
sample=[
dict(item.split(':') for item in part.split(','))
for part in text.split('|')]
print(sample)
# [{'eeid': '67739', 'ldap': 'alberthwang'}, {'building': 'CL5', 'eeid': '107', 'ldap': 'meng'}]
print(sample[1]['building'])
# CL5
str
是內置類型,因此將字符串分配給str
覆蓋內置函數。 最好選擇其他一些變量名,以避免將來出現意外錯誤。 我向后讀寫列表理解:
[ expression # (3)
for variable in # (2)
iterable # (1)
]
(1):首先,了解迭代。 在上面的解決方案中,這是text.split('|')
。
(2): for variable in
variable
,將variable
一次賦給iterable
的值。
(3):最后, expression
可以是任何Python表達式,(通常)使用variable
。
生成器表達式的語法幾乎相同。 列表推導和生成器表達式之間的區別在於,列表推導返回一個列表,而生成器表達式返回一個迭代器-一個對象,該對象按需產生其內容(在循環時或在調用next
時)而不是像list
那樣一次生成所有項目。
如果列表很長,則列表可能會占用大量內存。 生成器表達式將消耗更少的內存(甚至可以是無限的),因為並非所有元素都必須同時存在於內存中。
使用str
作為變量名是一個壞主意,因為它使內置的str
黯然失色。
s ='ldap:alberthwang,eeid:67739|ldap:meng,eeid:107,building:CL5'
res = [dict(colonStr.split(':') for colonStr in ds.split(','))
for ds in s.split('|')]
將結果存儲在res
。
這里的關鍵見解是dict
可以列出鍵/值對的列表。 因此,您可以使用如下理解方法進行此操作:
string = 'ldap:alberthwang,eeid:67739|ldap:meng,eeid:107,building:CL5'
list_of_dicts = [dict(item.split(':') for item in items.split(',')) for items in string.split('|')]
print list_of_dicts
也許這樣:
>>> s = 'ldap:alberthwang,eeid:67739|ldap:meng,eeid:107,building:CL5'
>>> x = [dict([d.split(':') for d in ls.split(',')]) for ls in s.split('|')]
>>> x[1]['building']
>>> 'CL5'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.