Как создать dict с двумя подсписками? - PullRequest
0 голосов
/ 29 сентября 2019

Я пытаюсь перебрать два набора запросов с ключами на основе дат в наборе. У каждой даты есть два типа предметов: жизненные события и работа. Диктовка должна выглядеть следующим образом:

Timeline['1980']['event'] = "He was born"
Timeline['1992']['work'] = "Symphony No. 1"
Timeline['1993']['event'] = "He was married"
Timeline['1993']['work'] = "Symphony No. 2"

Как мне создать этот словарь?

Я попробовал следующее:

    timeline = defaultdict(list)
    for o in opus:
        if o.date_comp_f is not None:
            timeline[o.date]['work'].append(o)
    timeline = dict(timeline)

    for e in event:
        if e.date_end_y is not None:
            timeline[e.date]['event'].append(e)
    timeline = dict(timeline)

Я продолжаю получать ошибки Key.

Ответы [ 3 ]

0 голосов
/ 29 сентября 2019
t = {}
t['1980'] = {
    'event':'He was born',
    'work':'None'
}

Или

t = {}
t['1980'] = {}
t['1980']['event'] = 'He was born'
t['1980']['work'] = 'None'
0 голосов
/ 29 сентября 2019

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

from collections import defaultdict
# Create empty dict for assignment
Timeline = defaultdict(defaultdict)
# store values
Timeline['1980']['event'] = "He was born"
Timeline['1992']['work'] = "Symphony No. 1"
# Create a regular dict for checking if both are equal
TimelineRegular = {'1980':{'event':"He was born"},'1992':{'work':"Symphony No. 1"}}
# check
print(Timeline==TimelineRegular)

Вывод:

>>> True
0 голосов
/ 29 сентября 2019
timeline = {'1980':{'event':'He was born', 'work':'None'}, '1992':{'event':'None', 'work':'Symphony No. 1'}, '1993':{'event':'He was married', 'work':'Symphony No. 2'}}

С результатами:

>>> timeline['1980']['event']
'He was born'
>>> timeline['1992']['work']
'Symphony No. 1'
>>> timeline['1993']['event']
'He was married'
>>> timeline['1993']['work']
'Symphony No. 2'

Это вложенный словарь, внешний словарь - это ключи дат со значениями другого словаря. Внутренний словарь - это ключи работы или события со значениями конечного значения.

И чтобы добавить больше:

>>> timeline['2019'] = {'event':'Asked stackoverflow question', 'work':'unknown'}
>>> timeline
{'1980': {'event': 'He was born', 'work': 'None'}, '1992': {'event': 'None', 'work': 'Symphony No. 1'}, '1993': {'event': 'He was married', 'work': 'Symphony No. 2'}, '2019': {'event': 'Asked stackoverflow question', 'work': 'unknown'}}

Когда вы добавляете новый ключ, вам нужно сделать значение пустымсловарь с местозаполнителями для каждого будущего ключа.

timeline['year'] = {'work':'', 'event':''}

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

timeline['year'] = {}
...