如何在Python中模拟.fetchall()?

时间:2013-11-17 03:31:53

标签: python json list dictionary tuples

这个问题可能最好标题为“我如何将字典列表转换为元组列表”,除非我不是100%确定这是正确的。

我正在修改我在网上找到的一个刮刀,它使用.fetchall()从数据库中抓取数据。

cur.execute("SELECT num, location FROM table WHERE location='My Town';")
the_query = cur.fetchall()

因此,脚本的其余部分希望the_query成为元组列表,我认为意味着the_query看起来像这样:

[(081143282, 'My Town'),(091338218, 'My Town')] ...

我的此刮刀的修改版本必须从JSON提要中获取数据,而不是使用fetchall从sqlite数据库中获取数据。使用demjson.decode(),我最终得到这样的数据:

[{u'num': u'081143282', u'location': u'My Town'}, {u'num': u'081143282', u'location': u'My Town'}]

同样,我认为这是一个字典列表,但由于我仍在学习这些不同的结构,我可能会弄错。

我尝试使用.item()和zip(*)将demjson.decode()的结果转换为元组列表,但到目前为止,我无法使其工作。

任何人都可以指导我完成这个吗?

2 个答案:

答案 0 :(得分:1)

您可以使用values()函数迭代字典列表并从每个字典中获取所有值,然后将它们转换为元组。

data = [{u'num': u'081143282', u'location': u'My Town'},
        {u'num': u'081143282', u'location': u'My Town'}]
print [(int(currentDict["num"]), currentDict["location"]) for currentDict in data]

<强>输出

[(81143282, u'My Town'), (81143282, u'My Town')]

答案 1 :(得分:1)

问题的第一部分是,你有字典(无序),你想要序列化(在元组中)。因此,您需要一种使用字典键指定的方式转换为什么顺序。

tupleOrder = ('num', 'location')

现在我们已经拥有了,我们需要能够将字典转换为有序内容的代码:

def asSeries(aDictionary):
    return (aDictionary.get(key) for key in tupleOrder)

这将返回一个生成器。要将它实现为元组,我们只使用tuple()函数:

def asSeries(aDictionary):
    return tuple(aDictionary.get(key) for key in tupleOrder)

现在,如果我们想要将所有内容压缩成一个班轮:

[tuple(dict.get(key) for key in tupleOrder) for dict in data]

你在这里有一些灵活性。您可以使用命名键(而不是编号索引)在一个位置更改tupleOrder。想使用list s?只需将tuple()替换为list()