我查询api:
url = 'https://api.forecast.io/forecast/'+api_key+'/'+lat+','+lng
f = urllib2.urlopen(url)
json_string = f.read()
parsed_json = json.loads(json_string)
c = parsed_json['currently']
某些键已定义,而其他键则未定义:
if 'temperature' in c:
我想构建一些具体值的对象:
vector = [c['temperature'], ... c['wind_speed']
总共应该有11个项目。如果一个键是未定义的,我想用另一个具有相同indeces的列表替换该位置的值。
averages = [average_temp, ... average_wind]
这样的事情:
# for each of the keys I want:
# if it is defined:
# add this value to the list
# else:
# add the value at the same index in the averages vector
我想你可能会同时索引这两个向量。当然,第一个载体尚未定义。不知何故,需要首先索引值。这样做的pythonic方法是什么?
答案 0 :(得分:3)
每当您的问题包含“...来自同一索引的不同列表”时,zip
就是这种情况。 stmt.execute("SELECT mystr, myint FROM mytable")
// Example 1:
val it = results(stmt.resultSet) {
case rs => rs.getString(1) -> 100 * rs.getInt(2)
}
val m = it.toMap // Map[String, Int]
// Example 2:
val it = results(stmt.resultSet)(_.getString(1))
获取一对列表,并将其转换为成对列表。
然后,你需要一个左边的表达式,除非它是null,在这种情况下是正确的。
然后你使用理解来映射整个zip。
所以:
zip
(我不知道您的“空”是什么意思或如何检查,但只需将[a if a != null else b for a, b in zip(A, B)]
替换为a != null
或a is not None
或其他适当的内容。)