GEE必须会教程—浩瀚如字典(字典类型)

//图片来源于网络

一本字典,承载的是文脉春秋,通过查阅字典,我们不仅能够获取小到身边的一针一线的基本信息、同样也能够了解大到思想深邃的世界真理,字典在文化传承上无疑是具有巨大价值的。当字典遇上编程语言,又会碰撞出什么样的火花?今天,让我们共同翻开字典,一起查阅GEE上的具有重要文化地位的字典数据类型。

1.定义字典类型

字典在编撰过程中,必须要建立起字和释义之间的关系,当读者查到字时,即可明其义。而在编程语言中,字典中的字我们可以看成是一个一个的关键词,称之为“键”(key),释义是关键词对应的值,称之为“值”(value),定义字典的过程,其实就是在字典中建立其键与值关系的过程。常见的编程语言的字典对象采用{key:value}的方式进行字典定义,在GEE上则需要采用:

ee.Dictionary({key1:value1,key2:value2,key3:value3}) 

//创建字典对象,其中包含姓名,专业,座右铭信息
var dict1 = ee.Dictionary({
  name:"Promising_GEO",
  major:"Geography Science",
  motto:"Where there's a will, there's a way"
});
print("dict1",dict1);

此处小编定义了一个字典对象,分别包含了姓名、专业、座右铭三个键,并给出了相应的关键词。除了这种方法以外,其实还有一种方法进行字典的定义,且看:

//根据列表生成新的字典
var keys = ["University","major","Grade"];
var values = ["Beijing Normal University","Physical Geography","Junior Year"];
var dict2 = ee.Dictionary.fromLists(keys,values);
print("dict2:",dict2);

和前面的字典定义过程相比,这里的定义过程是采用列表方式分开进行定义,先针对于keys和values分别定义,再利用fromLists方法进行合并并转化为字典类型。这种利用列表方法直接生成字典的方法非常重要。后续还会学习到利用影像直接生成影像集合的方法,与上述过程比较类似,后续再进行介绍。

2.获取字典的大小、键、值

字典编撰好了,接下来就是进行查阅,小编想知道字典一共有多少个字?以及字都是哪些?解释都是什么?

//获取字典的大小、关键词(一般称之为键)、值信息
print("Size:",dict1.size());
print("Keys:",dict1.keys());
print("Values:",dict1.values());

要知道字典数据中共有多少组对应的键-值,使用size,要知道键,使用keys,记得加复数,一般键不止一个,要知道值,使用values,是不是非常简单粗暴。

3.获取键对应的值

为了精准查阅,小编想知道字对应的解释,根据给出的字,怎么一步得到它所对应的含义呢?

//根据指定的键获取相对应的值
print("Name:",dict1.get("name"));
print("Major:",dict1.get("major"));
print("Motto",dict1.get("motto"));

精准查阅,请用get方法,输入键,即可输出值

4.合并两个字典

小编手上现在有两本字典,两本字典上都有所需要的字,单独分别查阅两本字典很麻烦,能不能将两本字典增删补漏,合并为一本呢?

var dict5 = ee.Dictionary({
  a:"a",
  b:"b",
  c:"c"
});
var dict6 = ee.Dictionary({
  a:"b",
  b:"c",
  c:"d"
});
var dict7 = dict5.combine(dict6);
var dict8 = dict5.combine(dict6,false);
print("dict7",dict7,"dict8",dict8);

如果在现实的应用环境中需要实现两本字典的合并,需要使用combine方法,这个方法一共有两个参数,一个是需要联合的字典,一个是布尔运算符,默认是true。需要注意的是,如果键名称重复,输出将包含第二个字典的值,除非 overwrite 为 false,则不覆盖。 两个字典中的空值都会被忽略/删除。

似乎有点绕,看小编在上面给出的例子吧,以下是输出结果:

找找结果一和结果二有何不同?开始时,小编使用combine方法进行字典合并事,并没有对第二个参数类型进行设置,由于第一个字典和第二个字典的键都相同,即都是a、b、c,那么结果输出时,相同键名的值将会被第二个字典的值覆盖掉,因此输出结果保留的是第二个字典的值。而后面小编设置了参数false,那边原字典的值将保留,不会被Overwrite。不能理解的同学可以结合小编的代码亲自上手看看,并且字典翻得越多越熟练。

5.判断字典中是否存在关键字

有时候,我们在查找字典时,需要通过笔画、拼音等方式查找字典目录中是否存在这样的字,有,我们会进行下一步,翻到对应页细看解释,没有,恭喜你,再来一本。

//判断原字典中是否存在指定键
var flag1 = dict1.contains("name");
var flag2 = dict2.contains("name");
print("Flag1:",flag1);
print("Flag2:",flag2);

实现这个过程的方法是contains,此处小编想知道字典1和字典2中是否存在关键词name,结果返回的是true or false,由于字典1中有姓名键,返回false,字典2中不存在姓名键,返回false。

6.添加键-值

为了扩充字典的字量,让字典内容更加全面,有时我们难免需要进行补充。

//往字典中添加值
var dict10 = dict6.set("d","e");
print("dict10",dict10);
var dict11 = ee.Dictionary(dict10);
print("dict11",dict11);

添加值采用set方法,共包含两个参数,一个是键,逗号隔开,写上第二个参数即键对应的值。需要注意的是,set方法会返回一个新的字典对象,该对象包含了添加了新键值对的原有字典。但是,这个新的字典对象并不是ee.Dictionary类型的对象,而是ee.ComputedObject类型的对象。这意味着,如果我们想继续使用字典类型的方法和函数对这个新的字典对象进行操作,就需要将其转换为ee.Dictionary类型。

因此,在使用set方法后,如果我们希望继续使用字典类型的方法和函数对字典进行操作,就需要使用ee.Dictionary来强制定义一个新的字典对象。这也是小编进行3,4行代码强制定义的原因。

7.修改字典的键

有的时候我们发现字典中的字写错了,需要修改,遇到这样的突发情况应该如何解决?

//修改键命名
var dict12 = dict11.rename(["a","b","c","d"],["m","n","o","p"]);
print("dict12:",dict12);

别急,一个rename方法直接解决所有问题,只需要将需要修改的键,和正确的键按照如上的方式写进去就可以了。此处小编想把字典11的的a,b,c,d改成m,n,o,p。

关于字典的基本用法就分享到这里就结束了,如果对你学习有帮助,别忘记给小编点赞哦!你的支持是对小编持续努力的原动力!

本篇案例代码链接:

https://code.earthengine.google.com/caae96321c2ae506345d68134d2e76c8icon-default.png?t=N7T8https://code.earthengine.google.com/caae96321c2ae506345d68134d2e76c8如果你对地理信息、遥感、地理科学、编程感兴趣,欢迎关注小编的公众号“梧桐凉月”,谢谢大家!咱们下期再会。

相关推荐

  1. python基础教程六(字典方法)

    2024-02-21 16:52:02       64 阅读
  2. ts字面类型

    2024-02-21 16:52:02       56 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-21 16:52:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-21 16:52:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-21 16:52:02       82 阅读
  4. Python语言-面向对象

    2024-02-21 16:52:02       91 阅读

热门阅读

  1. C#是什么?可以用来做什么?

    2024-02-21 16:52:02       59 阅读
  2. 备份服务器数据的重要

    2024-02-21 16:52:02       56 阅读
  3. 【webrtc】Paced Sending官方设计文档

    2024-02-21 16:52:02       55 阅读
  4. Oracle中TimeStamp和Date的区别

    2024-02-21 16:52:02       45 阅读
  5. Day34 贪心算法part03

    2024-02-21 16:52:02       47 阅读
  6. os.walk详解

    2024-02-21 16:52:02       48 阅读
  7. Linux的RPM 与 YUM

    2024-02-21 16:52:02       45 阅读