的Python:用逗号分隔的从集列表列表

问题描述:

我有一个看起来像这样的列表:的Python:用逗号分隔的从集列表列表

[ 
    {u'self': u'https://jr.com/Option/134', u'id': u'134', u'value': u'AI'}, 
    {u'self': u'https://jr.com/Option/135', u'id': u'135', u'value': u'E'} 
] 

有没有办法拿出一个逗号分隔的“价值观”为:AI, E 我认为我可以这样做:

l = [] 
for x in l: 
    val = x['value'] 
    l.append(val) 
print l 
final_l = ','.join(l) 

但想知道我是否可以用较少的代码做到这一点。

可以节省感谢几行comprehension

values = ','.join(item['value'] for item in lst) 

演示:

>>> lst = [ 
... {u'self': u'https://jr.com/Option/134', u'id': u'134', u'value': u'AI'}, 
... {u'self': u'https://jr.com/Option/135', u'id': u'135', u'value': u'E'} 
... ] 
>>> values = ','.join(item['value'] for item in lst) 
>>> values 
u'AI,E' 
+0

如果项目没有'价值'键?它会给你KeyError。 – tinySandy

+1

@minitoto:毫无理由地沉默异常并不是一个好主意。您现在禁止的例外情况可能会在稍后导致意外行为。在这种情况下,你不会阻止任何错误,只是延迟它,使其更难调试,或者可能引入严重的安全漏洞。 –

+0

它意味着你给出了一个潜在的错误代码片段,我推荐这样做','。如果item.get('value'))连接(item ['value']为item的项目) – tinySandy

','.join(['1','2','3','4']) 

是创建基于字符串的输入列表/元组以逗号分隔的序列的一种方法。在这种情况下,结果是'1,2,3,4'

在您的情况,您的命令可能是这样的(假设你想加入每个字典元素的“价值”:

','.join([x['value'] for x in l]) 

这种理解很容易做的:

>>> s = [ 
... {u'self': u'https://jr.com/Option/134', u'id': u'134', u'value': u'AI'}, {u'self': u'https://jr.com/Option/135', u'id': u'135', u'value': u'E'} 
... ] 
>>> ', '.join(x['value'] for x in s) 
u'AI, E' 

In [1]: foo = [ 
    ...: {u'self': u'https://jr.com/Option/134', u'id': u'134', u'value': u'AI'}, {u'self': u'https://jr.com/Option/135', u'id': u'135', u'value': u'E'} 
    ...: ] 

In [2]: ", ".join([x.get('value') for x in foo]) 
Out[2]: u'AI, E' 
+0

@minitoto干杯。 “不要假设你的输入”:o) –

+0

'.get()'默认为'None'。如果您确实想要抑制异常,则应该提供一个字符串作为默认值。 (尽管[错误不应该默默地通过](https://www.python.org/dev/peps/pep-0020/),这是一个重要原则) –

+0

公平评论@AndreaCorbellini:o)'.get('价值,'')'会更好的情况下,不会大声失败,是啊 –