Вложенность - список в dict и значение из того же индекса - PullRequest
0 голосов
/ 19 мая 2019

У меня есть словарь, который содержит около 470 пар ключ / значение, где значение является вложенным списком.Выглядит это так:

{'sample1': [0.052333365, 0.048546686, 0.037446034, 0.034170007, 0.027255262, 0.014583427, 0.022703695, 0.02747237, 0.036779904, 0.047089636, 0.068311633, 0.131601903, 0.213325007, 0.262173714], 
'sample2': [0.499261188, 0.569225594, 0.971341941, 0.983553048, 1.047320154, 1.214003077, 1.382066271, 1.332965957, 1.353788699, 1.224310364, 1.27942017, 1.297752738, 1.215054777, 1.336544035], 
'sample3': [3.015670427, 3.608257648, 3.060244617, 2.879527679, 2.720453311, 2.889312783, 2.899236274, 2.762219639, 3.257009779, 3.113135178, 3.312874684, 3.328944661, 3.564360549, 3.480976541]}

Первоначально он был создан таким образом из-за фокусировки на основе строки (образца) клиента, который получает доступ к данным.Каждый индекс представляет собой измерение, выполненное с интервалом в 2 месяца.

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

Мой вопрос заключается в том, существует ли простой способ извлечь значение, скажем, в index [1] или [5] для всех выборок, и при этом иметь возможность определить, из какой выборки получены значения, без необходимости воссоздания данных в двумерный список?

Ответы [ 3 ]

1 голос
/ 19 мая 2019

есть простой способ извлечь значение, скажем, из индекса [1] или [5] для всех выборок и при этом иметь возможность идентифицировать, из какой выборки получены значения, без необходимости воссоздания данных в двумерный список?

Вы можете использовать словарное понимание

Допустим, ваш пример словаря хранится в переменной с именем data, и мы хотим извлечь значения в 6-й позиции

row_5 = {k: v[5] for k, v in data.items()} 
# row_5 prints
{'sample1': 0.014583427, 'sample2': 1.214003077, 'sample3': 2.889312783}

Вы можете создать функцию, которая делает это универсальным способом.

def get_row(row_num, data_dict):
    return {k: v[row_num] for k, v in data_dict.items()}

Если вы хотите еще больше функций обработки данных, я бы посоветовал заглянуть в библиотеку панд.

1 голос
/ 19 мая 2019

Вы можете использовать словарь items() и значения индекса:

for k, v in d.items():
    print(f'{k} -> {v[1]}, {v[5]}')

, где d - ваш словарь.

Для заданного ввода это выводит:

sample1 -> 0.048546685999999999, 0.014583426999999999
sample2 -> 0.56922559399999995, 1.2140030770000001
sample3 -> 3.6082576479999999, 2.8893127829999998
0 голосов
/ 19 мая 2019

Мы можем использовать словарное понимание, чтобы воссоздать словарь только с данными из указанных индексов.

def get_data(dct, indexes):

    #Iterate through value list and collect element from specified indexes
    return {key: [value[idx] for idx in indexes] for key, value in dct.items()}

Так что для индексов [1,5] результат будет

print(get_data(dct, [1,5]))
#{'sample1': [0.048546686, 0.014583427], 'sample2': [0.569225594, 1.214003077], 'sample3': [3.608257648, 2.889312783]}
...