2016-02-04 82 views
2

我有一個看起來像這樣的列表:的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) 

但想知道我是否可以用較少的代碼做到這一點。

回答

4

可以節省感謝幾行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

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

是創建基於字符串的輸入列表/元組以逗號分隔的序列的一種方法。在這種情況下,結果是'1,2,3,4'

在您的情況,您的命令可能是這樣的(假設你想加入每個字典元素的「價值」:

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

這種理解很容易做的:

>>> 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' 
2
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('價值,'')'會更好的情況下,不會大聲失敗,是啊 –