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的startdict
理解构建结果,例如:
>>> {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的startdef 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}