Python 字典只存储新字典条目中的最后一个值
Python dictionary only stores last values in new dictionary entries
我有一个包含(纬度、经度、时间)的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
的 same-index 值的元组。
#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()
的迭代器具有不同的长度,则从 zip()
返回的 iterable
的长度将与提供的最短迭代器的长度相同。
a = [1, 2, 3]
b = ['a', 'b']
print(list(zip(a, b))) #[(1, 'a'), (2, 'b')]
- 提供的可迭代对象不必在类型上匹配,它们只需要符合
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)]
我有一个包含(纬度、经度、时间)的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
的 same-index 值的元组。
#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()
的迭代器具有不同的长度,则从zip()
返回的iterable
的长度将与提供的最短迭代器的长度相同。a = [1, 2, 3] b = ['a', 'b'] print(list(zip(a, b))) #[(1, 'a'), (2, 'b')]
- 提供的可迭代对象不必在类型上匹配,它们只需要符合
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)]