Извлечение значений словаря из списка - PullRequest
0 голосов
/ 28 января 2020

У меня в списке есть следующий словарь:

[{'week': 3, 'times': '07: 30 '}, {' week ': 4,' хронометраж ' : '20: 30 '}, {}, ....]

Я бы хотел выделить время и неделю и включить их в отдельные списки. Однако, поскольку снаружи есть список, ключи не распознаются. Я попытался сделать следующее:

for item in list:
    new_list =list( item.values() )[0] 

Но это показывает ошибку, потому что некоторые из них пустые, я думаю. В настоящее время я получаю сообщение об ошибке: IndexError: список индекса вне диапазона. Как я могу извлечь их из двух отдельных списков и иметь NaN, где они пустые?

Ответы [ 3 ]

3 голосов
/ 28 января 2020

Следующий код поможет извлечь значение недели и времени отдельно

check = [{'week': 3, 'timing': '07:30'}, {'week': 4, 'timing': '20:30'}]
week_list = []
timing_list=[]
for i in check:
    for k,v in i.items():
        if k == 'week':
            week_list.append(v)
        else:
            timing_list.append(v)


Output
```[3, 4]
['07:30', '20:30']
1 голос
/ 28 января 2020

Вы начинаете с создания двух списков и добавления элементов. Итерация должна быть выполнена для каждого объекта в списке, каждый объект является самим словарем. Допустим, список, содержащий словари, называется full_list, потому что называть его list было бы не слишком удобно для python.

week_list = []
timing_list = []

for i in full_list:
   week_list.append(i['week'])
   timing_list.append(i['timing'])

Если есть словари с пустыми значениями или пустые словари или словари только с week, но без timing, например, я хотел бы использовать:

import numpy as np
for i in full_list:
    try:
       week_list.append(i['week'])
    except KeyError:
       week_list.append(np.nan)
    try:
       timing_list.append(i['timing'])
    except KeyError:
        timing_list.append(np.nan)

Таким образом, вы добавите значение NaN в свой список, когда клавиша не существуют, и это окажется полезным, если вы позже выполните операции со списками.

Полный пример:

full_list = [{'week': 3, 'timing': '07:30'}, {'week': 4, 'timing': '20:30'},{},{'week':4},{'timing':'09:21'},{}]
week_list = []
timing_list = []
import numpy as np
for i in full_list:
    try:
       week_list.append(i['week'])
    except KeyError:
       week_list.append(np.nan)
    try:
       timing_list.append(i['timing'])
    except KeyError:
        timing_list.append(np.nan)
print(week_list)
print(timing_list)

Вывод:

[3, 4, nan, 4, nan, nan]
['07:30', '20:30', nan, nan, '09:21', nan]

Редактировать:

Если словарь похож на следующий:

full_dict = {'person_1':{'week': 3, 'timing': '07:30'},'person_2':{'week': 4, 'timing': '20:30'},'person_3':{}}

Итерация должна выполняться для каждого key. Следовательно, l oop будет:

for i in full_dict.keys():
    and exactly the same code as before
0 голосов
/ 28 января 2020

Я использовал этот код, чтобы извлечь их отдельно.

weeks = [ a['week'] for a in new_list ]

timings = [ a['timing'] for a in new_list ]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...