Python:创建一个包含dicts的列表

时间:2011-10-08 11:49:16

标签: python list dictionary

你会怎么转这个字符串:

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)

但我仍然坚持如何将列表项转换为字典,然后我可以用它来填充另一个列表。

4 个答案:

答案 0 :(得分:4)

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. List comprehensions是一种非常方便的构建方式 这样的清单。
  2. 来自可迭代键值对的dict can be constructed。上面使用的迭代是generator expression
  3. str是内置类型,因此将字符串分配给str覆盖 内置的。最好选择一些其他变量名来避免 未来令人惊讶的错误。

  4. 我向后读写列表推导:

    [ expression            # (3)
      for variable in       # (2)
      iterable              # (1)
    ]
    

    (1):首先,了解可迭代。在上面的解决方案中,这是text.split('|')

    (2):for variable in会导致variable分配给iterable中的值,一次一个。

    (3):最后,expression可以是任何Python表达式,(通常)使用variable

    生成器表达式的语法几乎相同。列表推导和生成器表达式之间的区别在于列表推导返回列表,而生成器表达式返回迭代器 - 一个按需生成其内容的对象(因为它是循环的,或者{{1} } {而不是像next一样生成所有项目。

    如果列表很长,列表会占用大量内存。 生成器表达式将消耗更少的内存(甚至可以是无限的),因为并非所有元素都必须同时存在于内存中。

答案 1 :(得分:0)

使用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

答案 2 :(得分:0)

这里的关键见解是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

答案 3 :(得分:0)

也许这样:

>>> 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'
相关问题