Генерация списка из сложного словаря - PullRequest
2 голосов
/ 01 сентября 2009

У меня есть словарь dict1['a'] = [ [1,2], [3,4] ], и мне нужно создать список из него как l1 = [2, 4]. То есть список из второго элемента каждого внутреннего списка. Это может быть отдельный список или даже словарь может быть изменен как dict1['a'] = [2,4].

Ответы [ 3 ]

8 голосов
/ 01 сентября 2009

С учетом списка:

>>> 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 голосов
/ 01 сентября 2009

Предполагая, что каждое значение в словаре является списком пар, тогда это должно сделать это для вас:

[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 любит тебя!

0 голосов
/ 01 сентября 2009

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

звучит как [sl[1] for sl in dict1['a']] - так в чем же ВОПРОС?! -)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...