2012-01-31 5 views

ответ

8

Предложение for содержит только 2 пункта, поэтому ваш окончательный дикт будет состоять из 2 предметов. Список из 4-х элементов используется только в качестве сравнения, а не как источник значений для использования.

6
if k in ['1','2','3','4'] 

является условием, а не итерации (см if).

Вы можете написать:

dict((k, {'1':'one','2':'two'}.get(k, None)) for k in ['1','2','3','4']) 

# returns: {'1': 'one', '2': 'two', '3': None, '4': None} 
+0

Спасибо за альтернативный путь. –

4

Это даст требуемый результат, как вам нужно пройти список для 4-х элементов, а затем присвоить соответствующие значения в словаре:

theDict = {'1':'one','2':'two'} 
s = dict((k,theDict[k]) if k in theDict else (k,None) for k in ['1','2','3','4']) 
2

у перебрать Dict с двумя ключами, а не список 4-элементный

мой код:

dict((k, {'1':'one', '2':'two'}.get(k, None)) for k in ['1', '2','3', '4']) 
0

Если мой хрустальный шар не был сломан, я бы предположил, что вы хотите другое направление: итерант k над списком и проверьте, находится ли он в словаре.

В этом случае, вы можете найти полезные

l = ['1', '2', '3', '4'] 
testdict = {'1': 'one', '2': 'two'} 
res = dict((k, testdict.get(k, None)) for k in l) 

This перебирает l и дает (k, testdict[k]) кортеж если k находится в testdict. Если нет, это дает (k, None) - точно так же, как вы (предположительно!) Хотите.