Python 更智能的数据收集方式或数据排序方式
我使用Python 更智能的数据收集方式或数据排序方式,python,dictionary,Python,Dictionary,我使用snip1从sqlite表中提取数据,这当然会获取包含相关id值的每一行。services列表现在看起来像output1 我希望能够将元组列表排序为更易于管理的数据集。合并所有相关的id集。 例如[(10,u'80'),(10,u'443')]变成{10:80443},当然,所有其他条目都添加到同一目录中 我很难对数据进行排序。如何比较同一列表中的项目?下面的example1显示了已清理的数据,但我不确定如何从中获得一个干净的字典 snip1 c.execute('SELECT * FRO
snip1
从sqlite表中提取数据,这当然会获取包含相关id
值的每一行。services
列表现在看起来像output1
我希望能够将元组列表排序为更易于管理的数据集。合并所有相关的id集。
例如[(10,u'80'),(10,u'443')]
变成{10:80443}
,当然,所有其他条目都添加到同一目录中
我很难对数据进行排序。如何比较同一列表中的项目?下面的example1
显示了已清理的数据,但我不确定如何从中获得一个干净的字典
snip1
c.execute('SELECT * FROM services WHERE id=?', (id_value,))
services = c.fetchall()
[[(2, u'22')], [(3, u'25')], [(4, u'443')], [(5, u'443')], [(6, u'443')], [(7, u'22')],
[(8, u'80')], [(9, u'443')], [(10, u'80'), (10, u'443')], [(11, u'80'), (11, u'443')],
[(12, u'80'), (12, u'443')], [(13, u'443')], [(14, u'80'), (14, u'443')], [(15, u'25')]]
data = [(2, u'22')], [(3, u'25')], [(4, u'443')], [(5, u'443')], [(6, u'443')], [(7, u'22')],
[(8, u'80')], [(9, u'443')], [(10, u'80'), (10, u'443')], [(11, u'80'), (11, u'443')],
[(12, u'80'), (12, u'443')], [(13, u'443')], [(14, u'80'), (14, u'443')], [(15, u'25')]]
for item in data:
for i in item:
print i #output2
输出1
c.execute('SELECT * FROM services WHERE id=?', (id_value,))
services = c.fetchall()
[[(2, u'22')], [(3, u'25')], [(4, u'443')], [(5, u'443')], [(6, u'443')], [(7, u'22')],
[(8, u'80')], [(9, u'443')], [(10, u'80'), (10, u'443')], [(11, u'80'), (11, u'443')],
[(12, u'80'), (12, u'443')], [(13, u'443')], [(14, u'80'), (14, u'443')], [(15, u'25')]]
data = [(2, u'22')], [(3, u'25')], [(4, u'443')], [(5, u'443')], [(6, u'443')], [(7, u'22')],
[(8, u'80')], [(9, u'443')], [(10, u'80'), (10, u'443')], [(11, u'80'), (11, u'443')],
[(12, u'80'), (12, u'443')], [(13, u'443')], [(14, u'80'), (14, u'443')], [(15, u'25')]]
for item in data:
for i in item:
print i #output2
示例1
c.execute('SELECT * FROM services WHERE id=?', (id_value,))
services = c.fetchall()
[[(2, u'22')], [(3, u'25')], [(4, u'443')], [(5, u'443')], [(6, u'443')], [(7, u'22')],
[(8, u'80')], [(9, u'443')], [(10, u'80'), (10, u'443')], [(11, u'80'), (11, u'443')],
[(12, u'80'), (12, u'443')], [(13, u'443')], [(14, u'80'), (14, u'443')], [(15, u'25')]]
data = [(2, u'22')], [(3, u'25')], [(4, u'443')], [(5, u'443')], [(6, u'443')], [(7, u'22')],
[(8, u'80')], [(9, u'443')], [(10, u'80'), (10, u'443')], [(11, u'80'), (11, u'443')],
[(12, u'80'), (12, u'443')], [(13, u'443')], [(14, u'80'), (14, u'443')], [(15, u'25')]]
for item in data:
for i in item:
print i #output2
输出2
(2, u'22')
(3, u'25')
(4, u'443')
(5, u'443')
(6, u'443')
(7, u'22')
(8, u'80')
(9, u'443')
(10, u'80')
(10, u'443')
(11, u'80')
(11, u'443')
(12, u'80')
(12, u'443')
(13, u'443')
(14, u'80')
(14, u'443')
(15, u'25')
您可以使用dict
和list
理解来完成这一操作
>>> data = [[(2, u'22')], [(3, u'25')], [(4, u'443')], [(5, u'443')], [(6, u'443')], [(7, u'22')],
[(8, u'80')], [(9, u'443')], [(10, u'80'), (10, u'443')], [(11, u'80'), (11, u'443')],
[(12, u'80'), (12, u'443')], [(13, u'443')], [(14, u'80'), (14, u'443')], [(15, u'25')]]
>>> output = {record[0][0]: [int(item[1]) for item in record] for record in data}
>>> output
{2: [22],
3: [25],
4: [443],
5: [443],
6: [443],
7: [22],
8: [80],
9: [443],
10: [80, 443],
11: [80, 443],
12: [80, 443],
13: [443],
14: [80, 443],
15: [25]}
要将元组列表转换为字典,请执行以下操作:
list = [(10, u'80'), (10, u'443')]
dict = {}
for (i, j) in list:
dict.setdefault(i, []).append(j)
这将为您提供:
>>> dict
{10: [u'80', u'443']}
然后,您可以使用pprint以便于比较字典项的方式进行打印
import pprint
pprint.pprint(dict)
这个例子只有一个键,但pprint会为每个键创建一个新行,与上面的键类似。在{10:80443}
中没有任何意义,你的意思是{10:[80443]}
?抱歉,我指的是带有键及其相关值的dict
。是的,如果这是正确的格式。这个练习的目的是什么?你的意思是什么?我会将数据集与新数据进行比较,如果不匹配,会进行更新。谢谢大家,这就是我喜欢编码的原因。给这只猫剥皮总是有不同的方法:)。我发现vishes_shell的答案是最激动人心的,所以我选择了它作为正确的答案。谢谢调用变量dict
和list
是个坏主意。如果您打算对字典值使用默认值,最好使用collections.defaultdict
数据类型。