2017-08-09 65 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

相关问题