繁体   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