遍历SQL数据并使用Python与自身进行比较

时间:2019-01-30 18:24:19

标签: python for-loop

我正在从SQL Server中提取数据,并使用Python重新格式化并将其与NoSQL文档数据库中的数据进行比较。

我从SQL返回的数据集如下所示: ('1','a') ('2','b') ('2','c') (“ 3”,“ d”) (“ 3”,“ e”) 第一个属性是ID,该ID可以重复多次,并附有第二个唯一标识符。 为了将SQL数据与NoSQL db中的JSON数据进行比较,我需要将数据放置为以下格式:

{
'ID':2,
'IDInfo': 
    {'OtherID':'b'},
    {'OtherID':'c'}
}

我在努力的是如何将列表与其自身进行比较。我必须比较第一行的ID和第二行的ID,然后比较第二行的ID和第三行的ID,依此类推。我知道如何在JavaScript中执行这种循环,但无法在Python中弄清楚。

我尝试遍历从索引0开始的列表,然后再次遍历索引1的同一列表并比较这些ID:

for index,row in enumerate(sqlResult):
    ID = row[0]
    i = index+1
    for index1,nextRow in enumerate(sqlResult, start=i):
        if (index1<i+1):
            nextRowId = nextRow[0]
        if (nextRowId == ID):
            #logic to append OtherID to a dynamically created object.
    print(ID,nextRowId) #Used this line to make sure the I was comparing the first ID to the next row's ID.

但是,此逻辑仅最终循环/返回我的行列表中的第一行。我完全对在python中两次遍历同一对象并比较值的概念感到困惑。请帮忙。

1 个答案:

答案 0 :(得分:0)

简而言之,可能是这样的:

>>> sql = [('1', 'a'), ('2', 'b'), ('2', 'c'), ('3', 'd'), ('3', 'e')]
>>> json = {}
>>> for a,b in sql:
...  json[a] = [b] if a not in json else json[a]+[b] # Ternary Operator
>>> json
{'1': ['a'], '3': ['d', 'e'], '2': ['b', 'c']}
>>> json.items()
[('1', ['a']), ('3', ['d', 'e']), ('2', ['b', 'c'])]
>>> [{a:json[a]} for a in json] # List Comprehension
[{'1': ['a']}, {'3': ['d', 'e']}, {'2': ['b', 'c']}]
>>> formatted_json = [ {'ID':int(i),'IDInfo':[{'OtherID':v} for v in json[i]] } for i in json]  # Dictionary Comprehension in a List Comprehension
>>> import pprint
>>> pprint.pprint(formatted_json)
[{'ID': 1, 'IDInfo': [{'OtherID': 'a'}]},
 {'ID': 3, 'IDInfo': [{'OtherID': 'd'}, {'OtherID': 'e'}]},
 {'ID': 2, 'IDInfo': [{'OtherID': 'b'}, {'OtherID': 'c'}]}]

Python中还有一个用于标准编码/解码/格式化的“ json”模块。希望对您有帮助!