查找内部dict是否包含特定in中的值

2024-04-19 18:08:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望你能再次帮助我。你知道吗

我有一个口述,其中我有一个信息的内在口述。举个例子:

    {
     'John': {'age': 27,'height': 181,'children': 2},
     'Jack': {'age': 33,'height': 203,'children': 1},
     'Carl': {'age': 52,'height': 162,'children': 3}
    }

我在一个有内部元组的元组中有一些条件,比如:

    (('age', 30, 60), ('height', 180, 220))

在内部元组中,第一个值是要检查的,然后是间隔中的最小值和最大值。我想返回的是一个列表,上面列出了制定所有标准的人员,因此在上面的示例中,我们应该有:

    ['Jack']

但我怎么才能聪明又好地做到这一点呢?我计划检查所有的人,然后检查每个人是否符合标准。我尝试了以下方法:

    def findPerson(persons, criteria):
        for p in persons:
            for tuble in criteria:

但这似乎毫无意义,因为p似乎只是人名,而不是整个条目,所以我回到原点。有人能帮我吗?你知道吗


Tags: in信息forage条件john例子元组
3条回答

您可以简单地使用列表理解和^{}函数,如下所示

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)]

输出

['Jack']

同样的列表理解代码,可以这样写

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

这将有助于您前进:

def findPerson(persons, criteria):
    for person,properties in persons.items():
        for tuble in criteria:
>>> d = {
...      'John': {'age': 27,'height': 181,'children': 2},
...      'Jack': {'age': 33,'height': 203,'children': 1},
...      'Carl': {'age': 52,'height': 162,'children': 3}
...     }
>>> conds = (('age', 30, 60), ('height', 180, 220))
>>> [k for (k,v) in d.items() if all(cond[1] <= v[cond[0]] <= cond[2] for cond in conds)]
['Jack']

相关问题 更多 >