繁体   English   中英

具有多个条件的字典的反向模糊匹配

[英]Inverse fuzzy match on dictionary with multiple criteria

我正在尝试在 python 字典上使用多个条件进行反向模糊选择,但我无法实现。

我有一本包含天气信息的字典:

{'time': '2020-01-21',
 'summary': 'Rain and dangerously windy throughout the day.',
 'icon': 'rain',
 'sunriseTime': 1579590780,
 'sunsetTime': 1579625640,
 'moonPhase': 0.9,
 'precipIntensity': 4.0669,
 'precipIntensityMax': 6.6666,
 'precipIntensityMaxTime': 1579640520,
 'precipProbability': 1,
 'precipType': 'rain',
 'temperatureHigh': 13.39,
 'temperatureHighTime': 1579608240,
 'temperatureLow': 11.49,
 'temperatureLowTime': 1579645500,
 'apparentTemperatureHigh': 13.11,
 'apparentTemperatureHighTime': 1579608240,
 'apparentTemperatureLow': 11.76,
 'apparentTemperatureLowTime': 1579645500,
 'dewPoint': 9.58,
 'humidity': 0.88,
 'pressure': 1024.8,
 'windSpeed': 14.23,
 'windGust': 23.47,
 'windGustTime': 1579628880,
 'windBearing': 72,
 'cloudCover': 0.99,
 'uvIndex': 1,
 'uvIndexTime': 1579608060,
 'visibility': 6.288,
 'ozone': 406.5,
 'temperatureMin': 8.41,
 'temperatureMinTime': 1579569780,
 'temperatureMax': 13.82,
 'temperatureMaxTime': 1579639560,
 'apparentTemperatureMin': 3.78,
 'apparentTemperatureMinTime': 1579569360,
 'apparentTemperatureMax': 13.54,
 'apparentTemperatureMaxTime': 1579639560}

我想删除文本中带有“时间”、“高”或“低”的所有键。

以下代码为我提供了要删除的所有键:

{k:v for (k,v) in forecast_dict[0].items() for x in ["Time", "High", "Low"] if x in k}

带输出:

{'sunriseTime': 1579590780,
 'sunsetTime': 1579625640,
 'precipIntensityMaxTime': 1579640520,
 'temperatureHigh': 13.39,
 'temperatureHighTime': 1579608240,
 'temperatureLow': 11.49,
 'temperatureLowTime': 1579645500,
 'apparentTemperatureHigh': 13.11,
 'apparentTemperatureHighTime': 1579608240,
 'apparentTemperatureLow': 11.76,
 'apparentTemperatureLowTime': 1579645500,
 'windGustTime': 1579628880,
 'uvIndexTime': 1579608060,
 'temperatureMinTime': 1579569780,
 'temperatureMaxTime': 1579639560,
 'apparentTemperatureMinTime': 1579569360,
 'apparentTemperatureMaxTime': 1579639560}

当我尝试使用以下内容进行反向选择时:

{k:v for (k,v) in forecast_dict[0].items() for x in ["Time", "High", "Low"] if x not in k}

我取回了包含所有条目的整个字典。 我认为问题在于列表解包,但如果它适用于直接过滤,它不应该适用于反向吗?

这是你追求的吗? 使用any()和一个生成器:

>>> {k:v for k, v in forecast_dict[0].items() if not any(x in k for x in["Time", "High", "Low"])}
{'time': '2020-01-21',
 'summary': 'Rain and dangerously windy throughout the day.',
 'icon': 'rain',
 'moonPhase': 0.9,
 'precipIntensity': 4.0669,
 'precipIntensityMax': 6.6666,
 'precipProbability': 1,
 'precipType': 'rain',
 'dewPoint': 9.58,
 'humidity': 0.88,
 'pressure': 1024.8,
 'windSpeed': 14.23,
 'windGust': 23.47,
 'windBearing': 72,
 'cloudCover': 0.99,
 'uvIndex': 1,
 'visibility': 6.288,
 'ozone': 406.5,
 'temperatureMin': 8.41,
 'temperatureMax': 13.82,
 'apparentTemperatureMin': 3.78,
 'apparentTemperatureMax': 13.54}

我建议更改条件以使用any

{k:v for k,v in forecast_dict[0].items() 
     if not any(x in k for x in ["Time", "High", "Low"])}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM