2015-04-30 2 views
1

я запрос АНИ:Создать список, заменить нулевые значения со значениями из другого списка в том же индексе

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: 

I хотите построить объект с несколькими конкретными значениями:

vector = [c['temperature'], ... c['wind_speed'] 

Всего должно быть 11 единиц. Если ключ не определен, я хочу заменить значение в этой позиции из другого списка с тем же индексом.

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 

Я полагаю, вы могли бы индекс через оба вектора одновременно. Конечно, первый вектор еще не определен. Как-то сначала необходимо проиндексировать значения. Что такое питонический способ сделать это?

+1

Ты известно о 'dict.get()'? http://stackoverflow.com/questions/9358983/python-dictionary-and-default-values ​​ – Paul

+0

Если вы хотите, чтобы значения по умолчанию были определены в dict(), а не в списке, см. этот ответ: http://stackoverflow.com/a/17501381/103081 – Paul

ответ

3

Всякий раз, когда ваша проблема включает «... из другого списка с тем же индексом», это случай для zip. zip берет пару списков и превращает их в список пар.

Тогда вам нужно выражение, которое является левым, если оно не пустое, и в этом случае правильная вещь.

И затем вы используете понимание, чтобы отобразить это на весь почтовый индекс.

Итак:

[a if a != null else b for a, b in zip(A, B)] 

(. Я не знаю, что ваш «нуль» означает, или как проверить его, а просто заменить a != null с a is not None или not a.is_null() или что-то уместно)

Смежные вопросы