Python字典只在新字典条目中存储最后的值

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) 这只是一个数据毫无意义的例子。

我有一个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)
这只是一个数据毫无意义的例子。但是,当我打印出
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()不熟悉。请随意建议一个包含它的解决方案。很好,它可以按需要工作!