您可以使用itertools.groupby 对元素进行分组,然后使用max() 和自定义key= 在组内搜索最新日期。例如:
import json
import urllib.request, json
from itertools import groupby
from datetime import datetime
url = "https://opendata.ecdc.europa.eu/covid19/nationalcasedeath_eueea_daily_ei/json/"
data = urllib.request.urlopen(url).read().decode()
obj = json.loads(data)
for country, group in groupby(
sorted(obj["records"], key=lambda k: k["countriesAndTerritories"]),
lambda k: k["countriesAndTerritories"],
):
mx = max(group, key=lambda k: datetime.strptime(k["dateRep"], "%d/%m/%Y"))
print(country)
print(json.dumps(mx, indent=4))
print("-" * 80)
打印:
Austria
{
"dateRep": "04/05/2021",
"day": "04",
"month": "05",
"year": "2021",
"cases": 888,
"deaths": 25,
"countriesAndTerritories": "Austria",
"geoId": "AT",
"countryterritoryCode": "AUT",
"popData2020": "8901064",
"continentExp": "Europe"
}
--------------------------------------------------------------------------------
Belgium
{
"dateRep": "04/05/2021",
"day": "04",
"month": "05",
"year": "2021",
"cases": 0,
"deaths": 0,
"countriesAndTerritories": "Belgium",
"geoId": "BE",
"countryterritoryCode": "BEL",
"popData2020": "11522440",
"continentExp": "Europe"
}
--------------------------------------------------------------------------------
Bulgaria
{
"dateRep": "04/05/2021",
"day": "04",
"month": "05",
"year": "2021",
"cases": 631,
"deaths": 56,
"countriesAndTerritories": "Bulgaria",
"geoId": "BG",
"countryterritoryCode": "BGR",
"popData2020": "6951482",
"continentExp": "Europe"
}
--------------------------------------------------------------------------------
...