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

2024-10-02 08:14:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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)

这只是一个数据毫无意义的例子。然而,当我打印出jibjibb时,它们的纬度和经度是完全相同的。为什么会这样?我想要的是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

Tags: infornameslatlatitudefloat32纬度经度
1条回答
网友
1楼 · 发布于 2024-10-02 08:14:50

使用zip()可以创建一个生成器,该生成器可以同时在所有可重用项上循环。当对iterables进行压缩时,将返回一个新的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')]
    
  • 提供的iterables不必在类型上匹配,它们只需符合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)]
    

相关问题 更多 >

    热门问题