Добавление кортежей в списки во вложенных словарях - PullRequest
0 голосов
/ 28 октября 2019

Я хотел бы добавить кортеж в список для данных, которые у меня уже есть в формате вложенного словаря, если он отсутствует.

all_cap = {"cap_1":{"id":1001, "vitals":[("Temp", 101), ("HR", 60)]}, "cap_2": 
{"id":1002, "vitals":[("Temp", 104), ("HR", 60), ("RR", 12)]}}

Итак, если я пошел, чтобы добавить кортеж ("RR", 16) для cap_1 это сработало бы, но если бы я захотел добавить его в cap_2, он не переписал бы уже существующий RR и даже не добавил бы в него второй RR. Я пытался войти в это так:

def add_vital(dict, str, int):
  if all_cap[dict]["vitals"][0][0:len("vitals")] == str:
    return True
  else:
    all_caps[dict]["vitals"].append(str, int)
    return False

Я знаю, что задавал здесь довольно много вопросов сегодня, и я действительно ценю ответы, которые я получил. Это помогало, но я только начал пытаться сделать какую-то работу в Python сегодня (до сих пор я использовал только R), поэтому приступить к работе с некоторыми из них было пугающим.

1 Ответ

0 голосов
/ 28 октября 2019

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

all_cap = { 
    "cap_1": { "id": 1001, "vitals": {
        "Temp": 101, 
        "HR": 60,
    }},
    "cap_2": { "id": 1002, "vitals": {
        "Temp": 104,
        "HR": 60,
        "RR": 12,
    }},
}

Теперь ваша функция add_vital просто:

def add_vital(cap_id, vital, value):
    # type: (str, str, int) -> bool
    if vital in all_cap[cap_id]["vitals"]:
        return True
    else:
        all_cap[cap_id]["vitals"][vital] = value
        return False

Учитывая структуру, которую вы получили, я думаю, вам нужно что-то более похожее на:

def add_vital(cap_id, vital, value):
    # type: (str, str, int) -> bool
    if any([vital_pair[0] == vital 
            for vital_pair in all_cap[cap_id]["vitals"]]):
        return True
    else:
        all_cap[cap_id]["vitals"].append((vital, value))
        return False
...