簡體   English   中英

Python:創建包含字典的列表

[英]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
  1. 列表理解是構造這樣的列表的一種非常方便的方法。
  2. 可以從可迭代的鍵值對構造字典 上面使用的迭代器是生成器表達式
  3. 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.

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