这个问题可能最好标题为“我如何将字典列表转换为元组列表”,除非我不是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()的结果转换为元组列表,但到目前为止,我无法使其工作。
任何人都可以指导我完成这个吗?
答案 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()
。