从复杂字典生成列表

时间:2009-09-01 04:17:36

标签: python-3.x python

我有一个字典dict1['a'] = [ [1,2], [3,4] ],需要生成一个列表l1 = [2, 4]。也就是说,每个内部列表的第二个元素中的列表。它可以是单独的列表,甚至字典也可以修改为dict1['a'] = [2,4]

3 个答案:

答案 0 :(得分: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()作为列表从字典中返回(键,值)对。因此,此代码将提取字典中的每个键,并将其与上面生成的列表配对。

答案 1 :(得分: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 shell是你的朋友!...

>>> 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爱你!

答案 2 :(得分:0)

  

第二个元素中的列表   每个内部列表

听起来像[sl[1] for sl in dict1['a']] - 所以问题是什么?! - )