我希望你编码大师可以再次帮助我.
我有一个字典,其中我有一个内部字典与信息.这是一个例子:
{
'John': {'age': 27,'height': 181,'children': 2},
'Jack': {'age': 33,'height': 203,'children': 1},
'Carl': {'age': 52,'height': 162,'children': 3}
}
Run Code Online (Sandbox Code Playgroud)
然后我在内元组的元组中有一些标准,如下所示:
(('age', 30, 60), ('height', 180, 220))
Run Code Online (Sandbox Code Playgroud)
在内部元组中,第一个值是要检查的内容,然后是间隔中的最小值和最大值.我想要返回的是一个列出所有标准的人的列表,所以在上面的例子中,我们应该只有:
['Jack']
Run Code Online (Sandbox Code Playgroud)
但是我怎么能以聪明又好的方式做到这一点呢?我正计划通过所有人,并为每个人检查该人是否符合标准.我尝试了以下方法:
def findPerson(persons, criteria):
for p in persons:
for tuble in criteria:
Run Code Online (Sandbox Code Playgroud)
但这似乎无处可去,因为p似乎只是人名,而不是整个条目,所以我回到原点.有人能帮我吗?
你可以简单地使用列表理解和all功能,就像这样
d = {
'John': {'age': 27,'height': 181,'children': 2},
'Jack': {'age': 33,'height': 203,'children': 1},
'Carl': {'age': 52,'height': 162,'children': 3}
}
rules = (('age', 30, 60), ('height', 180, 220))
print [k for k, v in d.items() if all(s <= v[key] <= e for key, s, e in rules)]
Run Code Online (Sandbox Code Playgroud)
产量
['Jack']
Run Code Online (Sandbox Code Playgroud)
相同的列表理解码,可以这样写
result = []
for k, v in d.items():
for key, start, end in rules:
if not (start <= v[key] <= end): break
else:
result.append(k)
print result
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |