将数组内的元组转换为Python中的字典

时间:2017-08-28 21:11:30

标签: python mysql django python-2.7

我一直试图解决这个问题,但我无法做到正确:( 我在Django中查询mySQL数据库,我的结果作为数组内部的元组返回。请参阅下面的虚拟数据;

everShp

500,302,550等......是我的记录。下一个元素是这些记录的日期。我想使用循环将它们附加到字典中,但我总是得到错误:

query_results = [
    (500, datetime.date(2017, 1, 1)),
    (302, datetime.date(2017, 1, 2)),
    (550, datetime.date(2017, 1, 3)),
    (180, datetime.date(2017, 1, 4)),
    (645, datetime.date(2017, 1, 5)),
    (465, datetime.date(2017, 1,6))
]

任何人都可以给我一些关于如何将这些内容添加到这样的内容的建议:

TypeError: list indices must be integers, not tuple.

非常感谢所有帮助!

4 个答案:

答案 0 :(得分:3)

您可以解压缩元组列表并将其压缩成带有所需键的字典,

dict(zip(['record', 'date'], zip(*query_results)))

输出

{'date': (datetime.date(2017, 1, 1),
          datetime.date(2017, 1, 2),
          datetime.date(2017, 1, 3),
          datetime.date(2017, 1, 4),
          datetime.date(2017, 1, 5),
          datetime.date(2017, 1, 6)),
 'record': (500, 302, 550, 180, 645, 465)}

<强>更新

如果你希望得到一个dicts列表,你可以直接使用列表推导。

[dict(record=record, date=date) for record, date in query_results]

输出

[{'date': datetime.date(2017, 1, 1), 'record': 500},
 {'date': datetime.date(2017, 1, 2), 'record': 302},
 {'date': datetime.date(2017, 1, 3), 'record': 550},
 {'date': datetime.date(2017, 1, 4), 'record': 180},
 {'date': datetime.date(2017, 1, 5), 'record': 645},
 {'date': datetime.date(2017, 1, 6), 'record': 465}]

答案 1 :(得分:0)

Mitch回答的替代格式,因为帖子对于想要的结果有点含糊不清:

>list_of_dicts = [ {'result': tup[0], 'date': tup[1]} for tup in query_results]

>list_of_dicts[0]    
{'result':500, 'date':datetime.date(2017, 1, 1) }

如果您希望将每个记录键设置为日期时间,则可以构建其他讨论,您可以将每个记录的字典构建为条目。这假设记录永远不会重复。在这种情况下,理解将如下所示:

my_dict = {str(record) : date for record, date in query_results}

dict的样子:

{"500": date1, "501", date2} #but not necessarily in order

答案 2 :(得分:0)

这个循环应该:

    my_dict = {}
    for item in query_results:
        my_dict[item[0]] = item[1]

这会将您的记录(500,550等)作为字典键(项目[0]部分)粘贴,以便您可以轻松地将它们调出。与这些键关联的值将是datetime对象(item [1] part)。

如果您想要更复杂的解决方案,请告诉我们。

汤姆

答案 3 :(得分:0)

如果你想把它们作为字典中的元组,Mitch的答案就可以了。

如果你想在每个循环中有一个单独的字典,你可以这样做:

for result in query_results:
    myDict = {}
    myDict["record"] = result[0]
    myDict["date"] = result[1]
    your_operation()

或者,如果您希望将记录作为键,将日期作为值(除非您有重复记录,这可能非常有用),您可以这样做:

myDict = {}
for result in query_results:
    myDict[result[0]] = result[1]

然后你会:

myDict = {"500": datetime.date(2017, 1, 1), 
          "302": datetime.date(2017, 1, 2), 
          etc..}