首页 > 解决方案 > 如何创建一个包含两个子列表的字典?

问题描述

我正在尝试使用基于集合中日期的键遍历两个查询集。每个日期都有两种类型的项目:生活事件和工作。字典应该是这样的:

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)

我不断收到错误的关键错误。

标签: pythondjangopython-3.xdjango-modelsdjango-views

解决方案


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'] = {}

推荐阅读