簡體   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