2017-08-09 67 views
0

我是python的新手,並且正在使用它來過濾來自服務器端的數據以用於圖形的前端。我需要從一個給定的名字,我可以用這個代碼做成功篩選訂單:使用python「或」過濾名稱或命令以查找名稱的全部小寫和全部大寫版本

def get_filteres_orders(dataset_id, order): 
data = dt.get(dataset_id).aslist() 
filtered_data = [x for x in data if x['PRIMARY_MNEMONIC'] == 
order ] 
filtered_data.sort(key=lambda x: to_data_time(x['ORDER_DTM']), reverse=True) 
return filtered_data 

不過,我需要尋找小寫和訂單的名字全部大寫版本兩者。例如,當我輸入ASPIRIN時,與輸入阿司匹林時相比,我得到了一個單獨的命令數組。我試圖添加|或操作數來說明所有大寫版本,但它不起作用。這裏是我有什麼:

def get_filteres_orders(dataset_id, order): 
data = dt.get(dataset_id).aslist() 
#filtered_data = [x for x in data if x['PRIMARY_MNEMONIC'] == order ] 
#filtered_data = [x for x | x.upper() for x in data if x['PRIMARY_MNEMONIC'] 
== order ] 
filtered_data = [x | x.upper() for x in data if x['PRIMARY_MNEMONIC'] == 
order ] 
filtered_data.sort(key=lambda x: to_data_time(x['ORDER_DTM']), reverse=True) 
return filtered_data 

任何想法我在做什麼錯在這裏? 提前謝謝!

+0

你可以指定你的意思是什麼「沒有按沒有工作「?你會得到什麼結果?你有錯誤嗎? 「數據」是什麼類型的數據結構?這是一本字典清單嗎?自定義對象類型的列表? – dlasalle

+0

您必須規範化數據輸入。即,所有數據必須以小寫或大寫格式。這將解決你的排序問題。 – mootmoot

+0

@dlasalle你絕對正確的「不起作用」是有點模糊。我得到一個內部服務器錯誤(500)。它說它來自我的ajax文件。我非常積極的,這是由於嘗試過濾/我缺乏Python知識的語法錯誤,因爲當我訴諸回到第一個過濾器功能,它工作正常。服務器正在使用名爲phovea的框架,但是數據是從csv文件中獲取的,並從phovea服務器導入。 – jrogers12

回答

2

爲什麼你不用x['PRIMARY_MNEMONIC'].lower() == order.lower()在Python中使用「或」而不是「|」並且順便說一句蟒蛇有過濾功能,這樣你就可以做這樣的事情也

filter(function, iterable)

filter(lambda x: x['PRIMARY_MNEMONIC'].lower() == order.lower(), data)

假設數據字典x | x.upper()是如此怪異

+0

嘿,謝謝你@Hamuel!我用x ['PRIMARY_MNEMIC']。upper()得到我需要的。我沒有使用字典,我有一個很長的從健康記錄數據庫中提取的順序值的csv文件。期待@mootmoot完全正確 - 重新格式化數據以便在文件中保持統一,這將是解決問題的方法。 – jrogers12