键之遍历
夫治国如驭键,循名责实,不可偏废。
`keys()`之法,犹商君之"名分定而物不争",可遍历键名而不涉其值。
观此例:
favorite_languages = {
"jen": "python", # 名jen者,执python之器
"sarah": "c", # 名sarah者,持c之兵
"edward": "rust", # 名edward者,操rust之术
"phil": "python" # 名phil者,亦通python之道
}
for name in favorite_languages.keys(): # 循名而察,如法家之"综核名实"
print(f"{name.title()}者") # 韩非云:"名正物定,名倚物徙"
输出如律令昭然:
Jen者
Sarah者
Edward者
Phil者
法曰:"上操名以驭下",故遍历键时,`for name in favorite_languages`与显式用`keys()`其效同,犹"刑名参同"之理,显隐皆可。
若欲"赏罚必信",可验特定键存否:
if "erin" not in favorite_languages.keys(): # 循名核实,如"刑过不避大臣"
print("Erin当受问策!") # 商君云:"言不中法者,不听也"
法家重"信赏必罚",代码示例如律令:
friends = ["phil", "sarah"] # 亲疏有度,如"法术之士"名录
for name in favorite_languages: # 遍历如"循名而责实"
if name in friends: # "赏誉同轨,非诛俱行"
language = favorite_languages[name].title()
print(f"{name.title()}君,善{language}之道,当赏!") # 韩非:"功当其事,事当其言则赏"
输出如律令施行:
Jen者
Sarah君,善C之道,当赏!
Edward者
Phil君,善Python之道,当赏!
法家云:"明主之治国,使民以法禁",代码之道亦然。
键值遍历当如"刑名参同",循环控制当如"信赏必罚",方合"以法为教"之旨。
循特定之序遍历字典中诸键
遍历字典之时,依插入元素之序回返其中元素,然于某些情境下,或需以别样之序遍历字典。
欲达此非顺序回返之目的,一法乃是于 for 循环之中对回返之键进行排序。
为此,可借助 sorted() 函数以获取依特定顺序排列之键列表副本。
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
for name in sorted(favorite_languages.keys()):
print(f"{name.title()}, thank you for taking the poll.")
此条 for 语句恰似法家之律令,虽与字典的 .keys() 结果调用了相同之函数,然 Python 先获取字典中所有之键,且在遍历前对该列表进行排序。
其输出表明,如依法家律令般按字母顺序展示了所有被调查者之名字:
Edward, thank you for taking the poll.
Jen, thank you for taking the poll.
Phil, thank you for taking the poll.
Sarah, thank you for taking the poll.
法家强调秩序与规则,正如在代码中我们通过特定的函数(如 sorted() 函数)为字典键的遍历建立秩序,使得输出结果遵循既定的规则,以一种规整且有序的方式呈现,如同法家以律法规整社会秩序一般,让代码的运行和结果的呈现皆有章可循。
遍历字典中所有之值
若君欲探寻字典所涵之值,可用 values() 方法。
此方法将回返一值之列表,其中不纳任何键。若欲得一仅含被调查者所选诸语言,而无被调查者姓名之列表,可依此为之:
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
print("The following languages have been mentioned:")
for language in favorite_languages.values():
print(language.title())
此条 for 语句,如法家律令般严谨,萃取字典中每个之值,并依次赋于变量 language。
通过打印这些值,便可得被调查者所选诸语言之列表:
The following languages have been mentioned:
Python
C
Rust
Python
斯时,此法仅提取字典中所有之值,未考量值有无重复。当涉及之值极多,虽非刻意重复,然若被调查者众多,最终列表或含大量重复项。
若欲剔除重复项,可使用集合(set)。于集合之中,每个元素皆独一无二,恰如法家之律法,一视同仁且无重复之规。
favorite_languages = {
'jen': 'python',
'sarah': 'c',
'edward': 'rust',
'phil': 'python',
}
print("The following languages have been mentioned:")
for language in set(favorite_languages.values()):
print(language.title())
将含重复元素之列表传入 set() 函数,Python 便能找出其中独一无二之元素,并以这些元素创建一集合。
此处用 set() 函数以提取 favorite_languages.values() 中不同之语言。
其结果为一不含重复元素之列表,详列被调查者提及之所有语言:
The following languages have been mentioned:
Python
C
Rust
随着研习渐深,君会常觉 Python 之内置功能,犹如法家之能臣,可助君以期望之方式处理数据。
须知,可用一对花括号直接创建集合,并以逗号分隔元素,如:
>>> languages = {'python', 'rust', 'python', 'c'}
>>> languages
{'rust', 'python', 'c'}
集合与字典极易混淆,盖因其皆用一对花括号定义。
然当花括号内无键值对时,所定义者很可能为集合。
与列表和字典不同,集合不以特定顺序存储元素,此亦如法家之法虽严谨,却不拘泥于刻板之序,重在维护本质之公正与秩序。
法典初涉:词汇表之规整
今已晓遍历字典之法,且回顾前文所撰之代码。将其中诸多`print()`函数调用,以遍历字典键与值之循环替代。
此过程,恰似法家于律令之规整修订,去繁就简,以成系统。
待此循环无误之后,于词汇表中添五则新的Python术语,再次运行程序,新术语及其释义便如律令昭彰般自动显于输出之中。
河川之典:字典构建与遍历
欲建一字典,存三条河川及其流经之国,如法家立法需明定诸事一般。
譬如键值对可为`'nile': 'egypt'`。
而后,以循环为令,为每条河川打印一则消息,如“尼罗河经埃及”。
亦需分别以循环将河川之名、诸国之名一一印出,使条理清晰,宛如法家之律令纲目分明。
调查之规:字典与人名名单交互
于前文所编之`favorite_languages.py`程序中行事。
先立一接受调查之人名名单,其中有人已在字典之中,有人未在。遍历此名单,对已参与调查者,致以谢讯,如法之褒奖;对未参与者,发以邀讯,如法之劝诫,令众人皆入调查之序,井然如法之统御。以下为结合法家理念的Python代码示例(以河川字典为例):
# 构建河川字典,如同法家订立法典,明确各项规定
rivers = {
'nile': 'egypt',
'yellow_river': 'china',
'amazon': 'brazil'
}
# 遍历河川字典,打印每条河川消息,如同依法宣示
for river, country in rivers.items():
print(f"{river.capitalize()} runs through {country.capitalize()}.")
# 打印河川名字,条理清晰如同法律条文列举
print("\nRiver names:")
for river in rivers.keys():
print(river.capitalize())
# 打印国家名字,秩序井然如同法律所涉范畴分明
print("\nCountry names:")
for country in rivers.values():
print(country.capitalize())
此代码以严谨之态,践行字典操作,恰如法家以严正之规治理诸事。