![](/img/trans.png)
[英]How can I match entries in pandas dataframes using multiple criteria and fuzzy logic?
[英]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.