2009-09-01 5 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 можно было бы это сделать и в понимании dict, если предпочтительнее был результат словаря: {k: [x [1] для x в v] для k, v в dict1.items()} – Anon

0

список из второго элемента каждый внутренний список

это звучит как [sl[1] for sl in dict1['a']] - так в чем вопрос -!)

Смежные вопросы