Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.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 在字典中搜索值介于两个数字之间的键_Python_Python 3.x_Dictionary_Search - Fatal编程技术网

Python 在字典中搜索值介于两个数字之间的键

Python 在字典中搜索值介于两个数字之间的键,python,python-3.x,dictionary,search,Python,Python 3.x,Dictionary,Search,我需要分析字典中包含两个给定数字(作为参数)之间的数字的值,并返回这些值,这些值前面有它们的键 字典: {'P':[("Eight",1460, 225.0, 200.0, "fresco","Netherlands"),("Six",1465,81.0, 127.1, "tempera", "Netherlands")], 'V':[("Four",1661, 148.0, 257.0,"oil paint", "Austria"),("Two",1630, 91.0, 77.

我需要分析字典中包含两个给定数字(作为参数)之间的数字的值,并返回这些值,这些值前面有它们的键

字典:

{'P':[("Eight",1460, 225.0, 200.0, "fresco","Netherlands"),("Six",1465,81.0, 127.1, "tempera", "Netherlands")],
        'V':[("Four",1661, 148.0, 257.0,"oil paint", "Austria"),("Two",1630, 91.0, 77.0, "oil paint","USA")],
        'K':[("Five",1922,63.8,48.1,"watercolor","USA"),("Seven",1950,61.0,61.0,"acrylic paint","USA"),("Two",1965,81.3,100.3,"oil paint","United Kingdom")],
        'C':[("Ten",1496,365.0,389.0,"tempera","Italy")],
        'U':[("Nine",1203,182.0, 957.0,"egg tempera","Italy"), ("Twelve",1200,76.2,101.6,"egg tempera","France")]
        }
该函数应仅返回两个数字之间存在数字的值。因此,如果函数是在两个值之间调用的,则在搜索1464和1496之间的值时应返回:

between_two_values(dictionary1(), 1464, 1496)

{'P': [('Six', 1465, 81.0, 127.1, 'tempera',    
'Netherlands')], 'C': [('Ten', 1496, 365.0, 
389.0, 'tempera', 'Italy')]}
如果键的某个值没有介于1464-1496之间的数字,则不应返回该值,而只应返回在该范围内的数字前面有键的值。这就是为什么在上面的“P”示例中,没有返回具有1460的第一个值,因为它不在两个数字之间。函数中的第一个数字应该总是小于第二个数字。如果第一个数字大于第二个数字,那么它应该只返回一个空字典

这是我提出的代码,我不认为它是正确的,但它显示了可以解决这个函数的逻辑。我感谢你对我的帮助

def between_two_values(dictionary,start,end):
    for x in dictionary:
        if end < x < start in dictionary:
            return dictionary(x)
两个值之间的定义(字典、开始、结束): 对于字典中的x: 如果字典中的end你走对了方向。这里有一个解决这个问题的方法

为了清晰起见,我对数据进行了更好的格式化。当它被浓缩下来时,我并没有立即看到每个字典值都被包装在一个列表中。当然,这是一个以风格为导向的变化,但风格有助于提高可读性

注意,我做了一些假设,比如每个字典值都是一个列表。例如,没有值的键的边大小写将表示为
[]
,而不是
None
。我还从你给出的例子中推断出了我认为期望的结果。最后,您可以考虑使用以简化存储匹配的位置。

除此之外,这段代码一点也不奇怪。您当然可以将其进一步压缩,或者使用类来表示语义。说到语义,我建议您使用比我更好的变量名:“数据”、“记录”和“值”非常通用,但我觉得它们有助于解释解决方案,而我对这些数据所代表的含义一无所知

如果使用Python 2,请考虑使用<代码>字典。 资料

代码


你在正确的轨道上。这里有一个解决这个问题的方法

为了清晰起见,我对数据进行了更好的格式化。当它被浓缩下来时,我并没有立即看到每个字典值都被包装在一个列表中。当然,这是一个以风格为导向的变化,但风格有助于提高可读性

注意,我做了一些假设,比如每个字典值都是一个列表。例如,没有值的键的边大小写将表示为
[]
,而不是
None
。我还从你给出的例子中推断出了我认为期望的结果。最后,您可以考虑使用以简化存储匹配的位置。

除此之外,这段代码一点也不奇怪。您当然可以将其进一步压缩,或者使用类来表示语义。说到语义,我建议您使用比我更好的变量名:“数据”、“记录”和“值”非常通用,但我觉得它们有助于解释解决方案,而我对这些数据所代表的含义一无所知

如果使用Python 2,请考虑使用<代码>字典。 资料

代码


您可以使用
dict
理解构建结果,例如:

>>> {k: [e for e in v if 1464 < e[1] < 1496] for k, v in dictionary.items()}
{'C': [],
 'K': [],
 'P': [('Six', 1465, 81.0, 127.1, 'tempera', 'Netherlands')],
 'U': [],
 'V': []}
>>{k:[e代表v中的e,如果1464
然后消除空结果:

def between_two_values(dictionary, start, end):
    result = {k: [e for e in v if start < e[1] < end] for k, v in dictionary.items()}
    return {k: v for k, v in result.items() if v}
两个值之间的定义(字典、开始、结束): 结果={k:[e表示v中的e,如果k的start
您可以使用
dict
理解构建结果,例如:

>>> {k: [e for e in v if 1464 < e[1] < 1496] for k, v in dictionary.items()}
{'C': [],
 'K': [],
 'P': [('Six', 1465, 81.0, 127.1, 'tempera', 'Netherlands')],
 'U': [],
 'V': []}
>>{k:[e代表v中的e,如果1464
然后消除空结果:

def between_two_values(dictionary, start, end):
    result = {k: [e for e in v if start < e[1] < end] for k, v in dictionary.items()}
    return {k: v for k, v in result.items() if v}
两个值之间的定义(字典、开始、结束): 结果={k:[e表示v中的e,如果k的start
您是否在字典中运行了您的代码?有错误消息要显示吗?@melgart现在说的是TypeError:unorderable types:int()def between_two_values(dictionary, start, end): result = {k: [e for e in v if start < e[1] < end] for k, v in dictionary.items()} return {k: v for k, v in result.items() if v}