将元组列表转换为字典(Pythonic方式)

1 投票
2 回答
1332 浏览
提问于 2025-04-18 13:32

这其实是一个关于最佳实践的问题。我现在做的东西运行得很好,但我很好奇有没有更简洁的方法来从我当前的数据结构中创建一个字典。

我正在从SQLite数据库中读取表格,数据以元组的列表形式返回。

[(49, u'mRec49', u'mLabel49', 1053, 1405406806822606L, u'1405406906822606'), 
(48, u'mRec48', u'mLabel48', 1330, 1405405806822606L, u'1405405906822606'), 
(47, u'mRec47', u'mLabel47', 1220, 1405404806822606L, u'1405404906822606')...
] 

我想把这个元组列表中的每一列提取出来,变成一个列表,然后从数据库中获取列名,使用这个列名作为字典的键,来保存这个列表。之后我会把这个字典转换成JSON格式。

这是我写的一个函数,它能完成这个任务,但我总是想知道有没有更好的方法来实现这个功能。

def make_dict(columns, list_o_tuples):
    anary = {}
    for j, column in enumerate(columns):
        place = []
        for row in list_o_tuples:
            place.append(row[j])
        anary[column] = place
    return anary

make_dict(mDBTable.columns, mDBTable.get_table())

注意:这个函数不应该关心它所处理的表格,也不应该在意表格中的行数和列数。

2 个回答

2

你可以简单地解压缩一下 list_o_tuples,然后用一种叫做字典推导式的方法,创建一个新的字典,这个字典里包含了对应的列数据和列标题。

columns = ["num1", "str1", "num2", "num3", "str2", "str3"]
print {columns[idx]:row for idx, row in enumerate(zip(*list_o_tuples))}
6

看起来你想要把这个元组列表进行转置:

transpose = zip(*list_o_tuples)

然后再把它和列名结合起来:

return dict(zip(columns, transpose))

撰写回答