Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python 2中按多个条件(年龄范围和性别)筛选姓名_Python_Python 2.7_Filter - Fatal编程技术网

在python 2中按多个条件(年龄范围和性别)筛选姓名

在python 2中按多个条件(年龄范围和性别)筛选姓名,python,python-2.7,filter,Python,Python 2.7,Filter,到目前为止,这在我的文本和代码中: { "people": [ {"name": "Jack", "gender": "M", "age": 25}, {"name": "Jerald", "gender": "M", "age": 24}, {"name": "Jim", "gender": "M", "age": 23}, {"name": "Bill", "gender": "M, "age": 22},

到目前为止,这在我的文本和代码中:

{
      "people": [
        {"name": "Jack", "gender": "M", "age": 25},
        {"name": "Jerald", "gender": "M", "age": 24},
        {"name": "Jim", "gender": "M", "age": 23},
        {"name": "Bill", "gender": "M, "age": 22},
        {"name": "Barry", "gender": "M", "age": 25},
        {"name": "Rikki", "gender": "M", "age": 35},
        {"name": "Ross", "gender": "M", "age": 33},
        {"name": "Jane", "gender": "F", "age": 25},
        {"name": "Bela", "gender": "F", "age": 24},
        {"name": "Cheeky", "gender": "F", "age": 22}
      ]
    }

import pprint
import json

my_data = json.loads(open("people.json.txt").read())


print "Choose the lowest age limit:",
age_from = int(raw_input())
print "Choose the highest age limit:",
age_to = int(raw_input())

print "People age from %r to %r." % ( age_from, age_to)

def filter_by_age_range(members, age_from, age_to):
print'%s'  % name [1]
我试图跟随某个关于过滤的网页,但我似乎无法使用过滤方法,尤其是在满足两个条件的情况下。例如,如果我需要22到25岁的男性(M)。我还试图找出是否只需要满足一个条件,这就是我迄今为止在代码中所具备的条件,但程序运行时没有出现错误,但没有给出我想要的输出。我也不知道名称[1]的作用。如果有人能帮我解决这个问题并帮助我理解过滤功能,我将不胜感激。顺便问一下,我使用int()作为提示是否正确?谢谢

过滤器(lambda person:person['age']>=22和
filter(lambda person: person['age'] >= 22 and
    person['age'] <= 25 and person['gender'] == 'M', members['people'])
人[“年龄”]=22和 人员['age']
过滤器(lambda人员:人员['age']>=22和
人[“年龄”]=22和

person['age']您可以使用列表理解,并在每行应用一个过滤函数

def filter_by_age( person, age_from, age_to ):
    if age_from <= person['age'] <= age_to and person['gender']=='M': return True
    else: False

filtered_people = [ p for p in my_data['people'] if filter_by_age(p, age_from, age_to) ]
def按年龄过滤(个人、年龄从、年龄到):

如果年龄从开始,您可以使用列表理解,并在每行应用一个过滤函数

def filter_by_age( person, age_from, age_to ):
    if age_from <= person['age'] <= age_to and person['gender']=='M': return True
    else: False

filtered_people = [ p for p in my_data['people'] if filter_by_age(p, age_from, age_to) ]
def按年龄过滤(个人、年龄从、年龄到):

如果第一个的age_有错误,表示成员未定义。第二个给出了无效的语法。你称它为
my_data
,我称它为
members
(就像你在函数中所做的那样)。没什么大不了的。(我忘了在其中一个中钻研
;现在已修复。不应该是语法错误,我刚刚测试了这两个。)第一个有一个错误,表示成员未定义。第二个给出了一个无效的语法。你称它为
my_data
,我称它为
members
(就像你在函数中所做的那样)。没什么大不了的。(我忘了在其中一个中钻研
;现在已修复。不应该是语法错误,我刚刚测试了这两个。)谢谢,它起作用了,所以如果我需要把名字与之对应的人放在一起,我应该放什么?例如,我需要男性(M),年龄22到25岁。我只需要打印真实的人的名字,而不是整行。在列表理解中,你可以对每个匹配的元素应用任何函数(元素在这里是词汇表)例如,如果你只对你能做的名字感兴趣:
[p['name']代表我的数据中的p['people']if filter\u by\u age(p,age\u from,age\u to)]
。列表理解是一个非常有用的工具。请查看此处的列表理解部分[.还有听写理解和集合理解。好的,非常感谢你的帮助..希望你下次能回答我的其他问题,因为我是编程新手:)谢谢它起作用了,所以如果我需要把名字对应的人放在哪里我应该放在哪里?例如,我需要男性(M)年龄在22到25岁之间。我只需要打印真实姓名,而不是整行。在列表理解中,你可以对每个匹配元素应用任何函数(元素在这里是词汇)。例如,如果你只对姓名感兴趣,你可以这样做:
[p['name']表示我的数据中的p['people']如果按年龄过滤(p,age\u from,age\u to)
。列表理解是一个非常有用的工具。请查看此处的部分列表理解[。还有听写理解和集合理解。好的,非常感谢您的帮助。。希望您下次能回答我的其他问题,因为我是编程新手:)