创建一个列表,将空值替换为同一索引处不同列表中的值

时间:2015-04-30 08:18:45

标签: python

我查询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方法是什么?

1 个答案:

答案 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 != nulla is not None或其他适当的内容。)