Python字典只在新字典条目中存储最后的值
我有一个netcdf文件(Python字典只在新字典条目中存储最后的值,python,dictionary,for-loop,python-xarray,Python,Dictionary,For Loop,Python Xarray,我有一个netcdf文件(data1),其中包含(纬度、经度、时间),我想提取特定的(纬度、经度)点。要做到这一点,我使用字典 lats=[20,40] lons=[-135,-75] names=['jib', 'jibb'] d={} for i in lats: for j in lons: for k in names: d[k]=data1.sel(latitude=i).sel(longitude=j) 这只是一个数据毫无意义的例子。
data1
),其中包含(纬度、经度、时间),我想提取特定的(纬度、经度)点。要做到这一点,我使用字典
lats=[20,40]
lons=[-135,-75]
names=['jib', 'jibb']
d={}
for i in lats:
for j in lons:
for k in names:
d[k]=data1.sel(latitude=i).sel(longitude=j)
这只是一个数据毫无意义的例子。但是,当我打印出jib
和jibb
时,它们具有相同的准确纬度和经度。为什么会这样?我想要的是jib
具有lat=20和lon=-135,而jibb
具有lat=40和lon=-75
d['jib']
time: 44160
Coordinates:
longitude
()
float32
-75.0
latitude
()
float32
40.0
d['jibb']
time: 44160
Coordinates:
longitude
()
float32
-75.0
latitude
()
float32
40.0
使用zip()。对iterable进行压缩时,将返回一个新的iterable
,其中包含来自所提供的每个iterable
的具有相同索引值的元组
#Example Zip Return ~ based on your data
names = ['jib', 'jibb']
lats = [20,40]
lons = [-135,-75]
print(list(zip(names, lats lons))) #[('jib', 20, -135), ('jibb', 40, -75)]
在生成器中使用zip()
时,只需在每次迭代中解压这些元组
#Solution:
d = {k:data1.sel(latitude=lt).sel(longitude=ln) for k, lt, ln in zip(names, lats, lons)}
注意事项:
- 如果提供给
zip()
的iterable具有不同的长度,则从zip()
返回的iterable的长度将与提供的最短iterable相同。
a = [1, 2, 3]
b = ['a', 'b']
print(list(zip(a, b))) #[(1, 'a'), (2, 'b')]
- 提供的iterable不必在类型上匹配,它们只需符合
iterable
类型。
a = (1, 2, 3)
b = ['a', 'b', 'c']
c = range(3)
print(list(zip(a, b, c))) #[(1, 'a', 0), (2, 'b', 1), (3, 'c', 2)]
使用zip()
这会很有帮助,而且不需要嵌套循环。您正在迭代两个lat、两个lon和两个名称的所有八个排列。字典中只保留了使用每个名称存储的最后一个值,因为它们重写了使用相同名称存储的前三个排列。如何防止这种情况发生?另外,我对zip()不熟悉。请随意建议一个包含它的解决方案。很好,它可以按需要工作!