Как добавить новую пару ключ-значение к существующей паре ключ-значение из списка диктов? - PullRequest
1 голос
/ 15 февраля 2020

У меня есть словарь с родительским ключом, и его значение является dict. Я хочу извлечь ключ, val пары из списка dict.

учитывая:

{"Premier" : {}}

Я хочу извлечь:

 all_compseasons = content: [
    {
        label: "2019/20",
        id: 274
    },
    {
        label: "2018/19",
        id: 210
    }]

Итак, чтобы получить:

{"Premier" : 
    {"2019/20" : 274, 
    "2018/19" : 210
    }
}

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

compseasons = {}
for comp in all_compseasons:
    competition_id = 'Premier'
    index = competition_id
    compseasons[index]comp['label'] = comp['id']

Ответы [ 2 ]

1 голос
/ 15 февраля 2020

Ты очень близко. Ключи словаря должны указываться с окружением [], поэтому comp['label'] должно быть [comp['label']]. Вы также можете просто использовать данный словарь {"Premier" : {}} вместо создания нового с compseasons = {}, но любой из них даст вам тот же результат.

Рабочий раствор:

d = {"Premier": {}}

all_compseasons = [{"label": "2019/20", "id": 274}, {"label": "2018/19", "id": 210}]

for comp in all_compseasons:
    d["Premier"][comp["label"]] = comp["id"]

print(d)
# {'Premier': {'2019/20': 274, '2018/19': 210}}
0 голосов
/ 15 февраля 2020

Вы только что допустили ошибку в том, как вы объявили compseasons и как вы получаете доступ к значению ключа premier, который также является словарем.

Объявление compseasons = {"Premier" : {}} не даст вам KeyError, когда вы пытаемся получить к нему доступ через compseasons[index], так как Premier уже вставлен в качестве ключа.

Во-вторых, поскольку ваше значение Premier само по себе является словарем, вы должны получить доступ к внутреннему ключу, заключенному в [], что переводится как compseasons[index][comp['label']] = comp['id'].

all_compseasons = [
{
    'label': "2019/20",
    'id': 274
},
{
    'label': "2018/19",
    'id': 210
}]

compseasons = {"Premier" : {}}

for comp in all_compseasons:
    competition_id = 'Premier'
    index = competition_id
    compseasons[index][comp['label']] = comp['id']
...