Python:集合列表中以逗号分隔的列表

Python:集合列表中以逗号分隔的列表,python,list,Python,List,我有一个如下列表: [ {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.appe

我有一个如下列表:

[
  {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)
但是我想知道我是否可以用更少的代码来完成

','.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'

由于以下原因,您可以节省几行:

演示:


如果项没有“value”键怎么办?它会给您KeyError。@minitoto:无理由地沉默异常从来都不是一个好主意。您现在抑制的异常可能会在以后导致意外行为。在这种情况下,您并没有阻止任何错误,您只是在延迟它,使其更难调试,或者可能引入严重的安全错误。请注意表示您提供的带有潜在错误的代码段,我建议这样做“,”。如果item.get('value')正确,则在lst中为item加入(item['value'])Andrea。此原则有一个名称,称为“fail fast”:。这似乎是一个矛盾,但快速故障系统是最健壮的。@minitoto:错误就在那里,不管你是否抑制它。如果有一个包含5项的列表和一个只有3个值的字符串,我会非常惊讶。我更喜欢使用异常来停止进程,而不是让错误传播(可能会导致更多问题)@minitoto欢呼。“对您的输入不做任何假设”:o)
.get()
默认为
None
。如果确实要抑制异常,则应提供字符串作为默认值。(尽管这是一个重要的原则)公平的评论@AndreaCorbellini:o)
.get('value',)
更适合于不会大声失败的情况,是的
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'
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'