2012-01-31 59 views
0

我的代碼:Python:字典理解有什麼問題?

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

預期輸出:

{'1': 'one', '2': 'two', '3':None, '4':None} 

實際輸出:

{'1': 'one', '2': 'two'} 

請幫幫忙!

回答

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

感謝您的替代方法。 – 2012-01-31 11:21:33

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

ü迭代的字典有兩個按鍵,而不是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) 

這個迭代l併產生(k, testdict[k])元組,如果ktestdict。 如果不是,它會產生(k, None) - 正如你(假定!)想要的一樣。