2015-07-30 2 views
1

У меня есть список, содержащий много элементов, и некоторые из этих элементов имеют свои собственные подкатегории. Список образца следующим образом (мой фактический список содержит> 100 элементов!):Python - Итерация и извлечение элементов списка типов словаря

data_all = [{u'heatindexm': u'-9999', u'windchillm': u'-999', u'wdire': u'ENE', u'wdird': u'70', u'windchilli': u'-999', u'hail': u'0', u'heatindexi': u'-9999', u'precipi': u'', u'thunder': u'0', u'pressurei': u'29.95', u'snow': u'0', u'pressurem': u'1014', u'fog': u'0', u'icon': u'', u'precipm': u'', u'conds': u'', u'tornado': u'0', u'hum': u'44', u'tempi': u'71', u'tempm': u'22', u'dewptm': u'12', u'rain': u'0', u'dewpti': u'54', u'date': {u'mday': u'01', u'hour': u'00', u'min': u'00', u'mon': u'07', u'pretty': u'12:00 AM BST on July 01, 2015', u'year': u'2015', u'tzname': u'Europe/London'}, u'visi': u'12', u'vism': u'19', u'utcdate': {u'mday': u'30', u'hour': u'23', u'min': u'00', u'mon': u'06', u'pretty': u'11:00 PM GMT on June 30, 2015', u'year': u'2015', u'tzname': u'UTC'}, u'wgusti': u'', u'metar': u'AAXX 30234 03772 45/69 /0710 10215 20120 30111 40140 58018 333 55300 20000', u'wgustm': u'', u'wspdi': u'11.5', u'wspdm': u'18.5'}, {u'heatindexm': u'-9999', u'windchillm': u'-999', u'wdire': u'East', u'wdird': u'90', u'windchilli': u'-999', u'hail': u'0', u'heatindexi': u'-9999', u'precipi': u'-9999.00', u'thunder': u'0', u'pressurei': u'29.95', u'snow': u'0', u'pressurem': u'1014', u'fog': u'0', u'icon': u'clear', u'precipm': u'-9999.00', u'conds': u'Clear', u'tornado': u'0', u'hum': u'56', u'tempi': u'69.8', u'tempm': u'21.0', u'dewptm': u'12.0', u'rain': u'0', u'dewpti': u'53.6', u'date': {u'mday': u'01', u'hour': u'00', u'min': u'20', u'mon': u'07', u'pretty': u'12:20 AM BST on July 01, 2015', u'year': u'2015', u'tzname': u'Europe/London'}, u'visi': u'-9999.0', u'vism': u'-9999.0', u'utcdate': {u'mday': u'30', u'hour': u'23', u'min': u'20', u'mon': u'06', u'pretty': u'11:20 PM GMT on June 30, 2015', u'year': u'2015', u'tzname': u'UTC'}, u'wgusti': u'-9999.0', u'metar': u'METAR EGLL 302320Z 09008KT CAVOK 21/12 Q1014 NOSIG', u'wgustm': u'-9999.0', u'wspdi': u'9.2', u'wspdm': u'14.8'}] 

Я хотел бы итерацию по списку и извлечь определенную информацию из каждого элемента (например, [ «pressurem»] и [ 'tempm '], но также информацию внутри подписок, таких как [' utcdate '] [' hour '] и [' utcdate '] [' min '] таким образом, чтобы выход каждой итерации помещался в новый список. Эти новые списки, в свою очередь, будут помещены (как элементы) в список макросов.

Я знаю, как получить информацию/значения, представляющие интерес Я хотел бы вручную, то есть могу вытащить значения, представляющие интерес для каждого элемента, как см. в приведенном ниже коде. Этот код возвращает значения (включая информацию от t он подписок), что меня интересует поиск из первого элемента в списке data_all.

data_string_sample=((data_all[0]['utcdate']['mday']),(data_all[0]['utcdate']['mon']),(data_all[0]['utcdate']['year']),(data_all[0]['utcdate']['hour']),(data_all[0]['utcdate']['min']),(data_all[0]['tempm']),(data_all[0]['hum']),(data_all[0]['pressurem'])) 
data_string_list=list(data_string_sample) 
print(data_string_list) 

Однако выше работает только для первого элемента списка, и я не могу понять правильный синтаксис для цикла, который будет итерации через каждый элемент списка data_all и производить один и тот же выходной сигнал для каждого элемента в пределах список data_all. Вывод каждого элемента списка data_all может быть захвачен и помещен в новый список ... Надеюсь, что вышеизложенное не слишком запутывает; в основном я пытаюсь использовать цикл (или аналогичный) в следующей форме:

for i in data_all: 
    generate i number of data_strings 
    convert each data_string into a list 
    have each mini list as an element within a new list (list_of_elements) 
    print (list_of_elements) to show: 
      #1 [u'30', u'06', u'2015', u'23', u'00', u'22', u'44', u'1014'] 
      #2 [u'11:20 PM GMT on June 30, 2015', u'21.0', u'56', u'1014'] 
      #3 etc...... 

Извинения для новичка вопрос - есть, вероятно, функция или библиотека, которая может сделать выше для меня, но я только обучение для кода, поэтому я хотел бы иметь возможность написать выше в правильном синтаксисе Python.

ответ

2

Вы показываете этот код уже:

data_string_sample=((data_all[0]['utcdate']['mday']),(data_all[0]['utcdate']['mon']),(data_all[0]['utcdate']['year']),(data_all[0]['utcdate']['hour']),(data_all[0]['utcdate']['min']),(data_all[0]['tempm']),(data_all[0]['hum']),(data_all[0]['pressurem'])) 
data_string_list=list(data_string_sample) 
print(data_string_list) 

Где вы конкретно ссылается элемент 0, вместо того, чтобы использовать переменную. Вы можете использовать номер, например:

for i in range(len(data_all)): 
    data_string_sample=((data_all[i]['utcdate']['mday']),(data_all[i]['utcdate']['mon']),(data_all[i]['utcdate']['year']),(data_all[i]['utcdate']['hour']),(data_all[i]['utcdate']['min']),(data_all[i]['tempm']),(data_all[i]['hum']),(data_all[i]['pressurem'])) 

Это более естественно, однако, чтобы цикл обработки индексацию для вас:

for data in data_all: 
    data_string_sample=((data['utcdate']['mday']),(data['utcdate']['mon']),(data['utcdate']['year']),(data['utcdate']['hour']),(data['utcdate']['min']),(data['tempm']),(data['hum']),(data['pressurem'])) 

Собрать каждый из этого в списке, убедитесь, список и добавьте свои данные:

interesting_data = [] 
for data in data_all: 
    data_string_sample=((data['utcdate']['mday']),(data['utcdate']['mon']),(data['utcdate']['year']),(data['utcdate']['hour']),(data['utcdate']['min']),(data['tempm']),(data['hum']),(data['pressurem'])) 
    interesting_data.append(data_string_sample) 
+0

Большое вам спасибо; он работал именно так, как нужно. Я вижу, что вы имеете в виду, ссылаясь на переменную; Я был на правильном пути, но у него не было прибита. Использование цикла для обработки индексации является существенным улучшением этого. –

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