我的代码:
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'}
请帮忙!
答案 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)
- 正如你(据说!)想要的那样。