Цикл по словарям при создании новых ключей - PullRequest
0 голосов
/ 11 марта 2020

У меня есть два словаря, один из которых содержит координаты города, а другой - временной интервал. Мои данные поступают в файл netcdf, который я открываю здесь.

data=xr.open_dataset('E:/Riskpulse_HD/Jon climate study/adaptor.mars.internal-1583855532.1432714-8122-5-ace27afd-90c0-4a7d-b9ca-f3d5528c5ea1.nc')

Затем я устанавливаю свою переменную.

lat = data['latitude'][:]
lon = data['longitude'][:]
temp = data['t2m'][:,0,:,:]-273

cities = {
    "Shangai": {"coords": [31.25, 121.5]},
    "Singapore": {"coords": [1.25, 103.75]},
    "Shenzhen": {"coords": [22.5, 114]},...}

decades = {
    "1990s": {"start": dt.datetime(1990,1,1), "end": dt.datetime(1999,12,31)},
    "2000s": {"start": dt.datetime(2000,1,1), "end": dt.datetime(2009,12,31)},
    "2010s": {"start": dt.datetime(2010,1,1), "end": dt.datetime(2019,12,31)}}

Я хочу через них l oop и создать новые ключи, такие как что у меня может быть что-то вроде cities["Shangai"]["1990s"]. Вот код, который я использую, чтобы попытаться это сделать:

for city, location in cities.items():
    data = temp.sel(latitude=location['coords'][0], longitude=location['coords'][0])
    for decade, dates in decades.items():
        city[decade] += data.sel(time=(slice(dates['start'], dates['end'])))

Однако он возвращает эту ошибку, и я не уверен, что он пытается мне сказать.

Ошибка:

*-->4 city[decade] += data.sel(time=(slice(dates['start'], dates['end'])))*

*TypeError: string indices must be integers*

Редактировать

В конце концов мне удалось решить эту проблему.

for city, location in cities.items():
    data = temp.sel(latitude=location['coords'][0], longitude=location['coords'][0])
    for decade, dates in decades.items():
        cities[city][decade] = data.sel(time=(slice(dates['start'], dates['end'])))

1 Ответ

2 голосов
/ 11 марта 2020

Вы устанавливаете value на dict[key]. Это делается через dict[key] = value (вы написали +=).

Я не знаю, что делают ваши temp.sel и data.sel, но в вашем случае вам будет хорошо написать:

for city, citydata in cities.items():
  for decade, dates in decades.items():
    cities[city][decade] = dates
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...