如何在Python中创建字典并用SQL查询的结果填充键和值?

问题描述

我希望制作一个日历,以显示在哪一天进行特定更新。我运行了一个SQL查询并获得了一个元组列表,其中显示了月号和日期

[(5,4),(5,7),8),.......,(10,30),(11,1)]

我想创建一个字典,其中的键是第一个数字,即月份,值是天,但是我似乎无法弄清楚。

我非常基本的代码如下:

m={5: [],6:[],7:[],8:[],10:[],11:[]}
for i in y:
    day=m.get([i[0])
    day.append(i[1])

这将使用查询中的所有值填充每个列表。

我似乎无法弄清楚如何将键映射到元组中的每个键并将值添加到字典中

解决方法

您的代码片段可以完成任务,但是您必须使用将一个月映射到空白列表的条目来预填充字典。这是因为您错过了类似的内容:“如果该月不在词典中,则创建一个新条目,将其映射到一个空列表”。 在Python中,这非常简单:

if k not in d:
    d[k] = []

因此您可以编写:

>>> months_days = [(5,4),(5,7),8),(10,30),(11,1)]
>>> d = {}
>>> for month,day in months_days: # destructuring assignment to unpack the tuple
...     if month not in d:
...             d[month] = []
...     d[month].append(day)
... 
>>> d
{5: [4,7,8],10: [30],11: [1]}

您甚至可以使用setdefault method使其更加简洁:

如果key在字典中,则返回其值。如果不是,请插入具有默认值的密钥,然后返回默认值。默认默认为无。

示例:

>>> d = {}
>>> for month,day in months_days:
...     d.setdefault(month,[]).append(day)
... 
>>> d
{5: [4,11: [1]}

或者您可以使用collections.defaultdict

>>> import collections
>>> d = collections.defaultdict(list)
>>> for month,day in months_days:
...     d[month].append(day)
... 
>>> d
defaultdict(<class 'list'>,{5: [4,11: [1]})

defaultdictdict的子类,因此可以将defaultdict用作dict