d = {3: 21, 30: 200, 300: 2000}
如果我这样做,
for i in range(1, 5):
for key, value in d.iteritems():
if key == i:
val = value
我的价值正确。但是,如果我将其改为列表理解方式,我会变空'val'
for i in range(1, 5):
val = [value for key, value in d.iteritems() if key == i]
我可以知道我在这里想念的吗
答案 0 :(得分:3)
你重新val
range()
的每次迭代,而你的第一个循环不会这样做。当val
为真时,您的第一个嵌套循环仅设置key == i
,这仅在i == 3
为真时发生。因此val
时i == 3
设置正确,i == 4
下一个循环时完全,而第二次尝试使用列表解析时val = [21]
val = []
结果val
。
扩展for i in range(1, 5):
val.extend(value for key, value in d.iteritems() if key == i)
每个循环:
val = [value for i in range(1, 5) for key, value in d.iteritems() if key == i]
或者更好的是,只运行一个列表理解:
>>> [value for i in range(1, 5) for key, value in d.iteritems() if key == i]
[21]
演示:
i
如果你要查找的是你字典中关键字的最后一个next()
的值,则反转范围,使用带有生成器表达式的val = next(d[i] for i in range(4, 0, -1) if i in d)
,然后测试密钥是否在字典,而不是遍历字典中的所有项目:
4
这只使用成员资格测试(O(1)操作)测试3
和<script type="text/javascript">
var defDate = @ViewBag.EndDate;
if (defDate == null)
{
$('#dt2').datetimepicker({
locale: 'en-GB',
format: 'L',
showClear: true
});
}
else
{
$('#dt2').datetimepicker({
defaultDate: defDate,
locale: 'en-GB',
format: 'L',
showClear: true
});
}
</script>
,然后完全退出循环。