2014-01-28 13 views
1

使用Python我想按照我給它的查詢的相同順序從字典表中得到結果。 我提供查詢與元組作爲一個細分的句子(我可以在一個有序的列表,如數組?)。 我使用了一個標準的MySQLdb的光標(我應該嘗試不同的一個?),並用它如下執行查詢:如何以我的查詢的相同順序排列我的SQL結果(將一個句子分解爲一個單詞元組)?

import MySQLdb 
... 

sent_tuple = ('The', 'opening', 'session', 'of', 'the', '5-day', 'session', 'will', 'begin', 'at', '10', 'a.m.', 'today', '.') 
mysql_cursor = mysql.cursor() 
query = ("SELECT DISTINCT Orthography, Transcription FROM Dictionary WHERE Orthography IN " + sent_tuple + " ORDER BY FIELD(Transcription, Orthography)") 
for rows in mysql_cursor: 
    print rows 

出來的結果,而不是在相同的順序在sent_tuple給出,但或多或​​少上按字母順序,我的猜測是SELECT語句的默認...:

('AT', 'AE T') 
('BEGIN', 'B IH G IH N') 
('OF', 'AH V') 
('OPENING', 'OW P AH N IH NG') 
('SESSION', 'S EH SH AH N') 
('THE', 'DH AH') 
('TODAY', 'T AH D EY') 
('WILL', 'W IH L') 
('.', '.') 

也有一些缺失的結果,其中沒有從字典匹配。不知道如何處理這個...方向??

我在StackExchange看過一些類似的帖子,例如:涉及ORDER BY,但似乎無法讓他們工作...

+0

你的元組將獲得多久? (即,您一次處理多少個單詞?) – jdhildeb

+0

也許介於2到25個項目之間? – user2911

回答

1

我不確定是否有可能在SQL中執行此操作,但您當然可以使用原始輸入元組作爲遍歷結果:

from collections import OrderedDict 

sent_tuple = ('The', 'opening', 'session', 'of', 'the', '5-day', 'session', 'will', 'begin', 'at', '10', 'a.m.', 'today', '.') 
rows = [ 
    ('AT', 'AE T'), 
    ('BEGIN', 'B IH G IH N'), 
    ('OF', 'AH V'), 
    ('OPENING', 'OW P AH N IH NG'), 
    ('SESSION', 'S EH SH AH N'), 
    ('THE', 'DH AH'), 
    ('TODAY', 'T AH D EY'), 
    ('WILL', 'W IH L'), 
    ('.', '.'), 
] 

index = OrderedDict.fromkeys(i.upper() for i in sent_tuple) 
rows_dict = dict(rows) 
ordered_rows_gen = (
    (i, rows_dict[i]) for i in index if i in rows_dict 
) 

for row in ordered_rows_gen: 
    print row 

我創建了indexOrderedDict與輸入的元組值作爲密鑰,因爲這提供了一種快速有序集,並會避免輸出任何重複。

+0

謝謝!我使用索引,效果很好。 – user2911

相關問題