Python:词典理解有什么问题?

时间:2012-01-31 11:13:33

标签: python dictionary

我的代码:

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'}

请帮忙!

5 个答案:

答案 0 :(得分:8)

for子句只包含2个项目,所以最终的dict只有2个项目。 4项目列表仅用作比较,而不是用作值的来源。

答案 1 :(得分: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}

答案 2 :(得分: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'] )

答案 3 :(得分:2)

u使用两个键迭代dict,而不是4个元素的列表

我的代码:

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

答案 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]),则会迭代k并产生testdict元组。 如果没有,它会产生(k, None) - 正如你(据说!)想要的那样。