我的代碼: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'}
請幫幫忙!
我的代碼: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'}
請幫幫忙!
for
子句只包含2個項目,所以您的最終字典只會有2個項目。 4項目列表僅用於比較,而不是用作值的來源。
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}
這將使所需的結果,因爲你需要遍歷列表的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'])
ü迭代的字典有兩個按鍵,而不是4元列表
我的代碼:
dict((k, {'1':'one', '2':'two'}.get(k, None)) for k in ['1', '2','3', '4'])
如果我的水晶球沒有破裂,我猜你想要另一個方向:在列表上迭代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])
元組,如果k
在testdict
。 如果不是,它會產生(k, None)
- 正如你(假定!)想要的一樣。
感謝您的替代方法。 – 2012-01-31 11:21:33