2009-09-01 48 views
2

名单我有一本字典dict1['a'] = [ [1,2], [3,4] ]和需要生成一个列表出来的作为l1 = [2, 4]。即每个内部列表的第二个元素列表。它可以是一个单独的列表,甚至字典可以修改为dict1['a'] = [2,4]生成从复杂的字典

回答

2

- 所以有什么问题吗?!对的列表,那么这应该为你做它:

[pair[1] for pairlist in dict1.values() for pair in pairlist] 

正如你可以看到:

  • dict1.values()让你只值在你的字典,
  • for pairlist in dict1.values()让你对所有的名单,
  • for pair in pairlist让你所有对在每个名单中,
  • pair[1]让你的每对中的第二个值。

试试吧。 Python的外壳是你的朋友?

>>> dict1 = {} 
>>> dict1['a'] = [[1,2], [3,4]] 
>>> dict1['b'] = [[5, 6], [42, 69], [220, 284]] 
>>> 
>>> dict1.values() 
[[[1, 2], [3, 4]], [[5, 6], [42, 69], [220, 284]]] 
>>> 
>>> [pairlist for pairlist in dict1.values()] 
[[[1, 2], [3, 4]], [[5, 6], [42, 69], [220, 284]]] 
>>> # No real difference here, but we can refer to each list now. 
>>> 
>>> [pair for pairlist in dict1.values() for pair in pairlist] 
[[1, 2], [3, 4], [5, 6], [42, 69], [220, 284]] 
>>> 
>>> # Finally... 
>>> [pair[1] for pairlist in dict1.values() for pair in pairlist] 
[2, 4, 6, 69, 284] 

,而我在这,我只想说:ipython爱你!

8

给出一个列表:

>>> lst = [ [1,2], [3,4] ] 

你可以用一个简单的列表理解提取每个子列表的第二个元素:

>>> [x[1] for x in lst] 
[2, 4] 

如果你想在字典中做到这一点的每一个值,你可以迭代字典。我不知道你希望你的最终数据看起来像什么,但这样的事情可能会有所帮助:从字典

>>> dict1 = {} 
>>> dict1['a'] = [ [1,2], [3,4] ] 
>>> [(k, [x[1] for x in v]) for k, v in dict1.items()] 
[('a', [2, 4])] 

dict.items()回报(键,值)对,作为一个列表。因此,这段代码将提取字典中的每个关键字,并将其与上面生成的列表进行配对。

+2

而在Python 3中,可以在一个字典理解做到这一点,也是如此,如果一个字典结果应首选 - 看起来像:{K:[X [1] v中X]为K,V在dict1.items ()} – Anon 2009-09-01 20:09:40

0

列表出来的 第二个元素的每个内部列表

这听起来像[sl[1] for sl in dict1['a']]的 - )假设在字典中的每个值是