Ruby 中哈希的一些骚操作

Python015

Ruby 中哈希的一些骚操作,第1张

字面量方式创建哈希

clear 方法可以清除哈希里面的数据

delete delete_if 可以删除和删除指定条件的键值

reject reject! 也可以删除指定的键值对

invert 方法可以用来颠倒键值对

keys values 可以获取键值的集合

has_key? has_value? 方法可以检测哈希中是否包含指定的键值

each each_key each_value 用于迭代哈希

merge merge! 用来合并两个哈希

symbolize_keys symbolize_keys! 方法用来将所有的键转换为 symbol

按键排升序降序

按值排升序降序

之前有位粉丝说我写的东西像复制粘贴的,自己一看还真是像,以后会尽量改正。

练习题

练习 5-8:以特殊方式跟管理员打招呼 创建一个至少包含 5 个用户名的列表,且

其中一个用户名为'admin'。想象你要编写代码,在每位用户登录网站后都打印一条文字

好消息。遍历用户名列表,并向每位用户打印一条问候消息。如果用户名为'admin',就打印一条特殊的问候消息,如下所示。 Hello admin, would you like to see a status report? 否则,打印一条普通的问候消息,如下所示。 Hello Jaden, thank you for logging in again.

步骤

创建一个至少包含 5 个用户名的列表,且 其中一个用户名为'admin'

这个要求是简单的创建列表,列表中包含’admin’的元素。

user_names = ['admin','wangwei','lijie','xufeng','jaden']

想象你要编写代码,在每位用户登录网站后都打印一条文字好消息。想象你要编写代码,在每位用户登录网站后都打印一条文字 好消息。遍历用户名列表,并向每位用户打印一条问候消息。如果用户名为'admin',就打印一条特殊的问候消息,如下所示。 Hello admin, would you like to see a status report? 否则,打印一条普通的问候消息,如下所示。 Hello Jaden, thank you for logging in again.

这个就是if语句的简单用法:

"""

以特殊方式跟管理员打招呼

"""

# 创建一个至少包含 5 个用户名的列表,且其中一个用户名为'admin'。

user_names = ['admin' , 'wangwei' , 'lijie' , 'xufeng' , 'jaden']

for user_name in user_names: # 遍历用户列表

if user_name == 'admin': # 判断用户是否为admin

print(f"Hello {user_name},would you like to see a status report")

else:

print(f"Hello {user_name.title()},thank you for logging in again.")

以后写代码会加上注释慢慢养成习惯,并规范他

练习 5-9:处理没有用户的情形 在为完成练习 5-8 编写的程序中,添加一条 if 语

句,检查用户名列表是否为空。如果为空,就打印如下消息。 We need to find some users!

删除列表中的所有用户名,确定将打印正确的消息

user_names = []

if user_names: #判断是否列表为空

for user_name in user_names: # 遍历用户列表

if user_name == 'admin': # 判断用户是否为admin

print(f"Hello {user_name},would you like to see a status report")

else:

print(f"Hello {user_name.title()},thank you for logging in again.")

else:

print("We need to find some users!")

这里是在遍历for语句前加个if语句判断 user_names列表是否有元素,是执行for语句,不是输出We need to find some users!

练习 5-10:检查用户名 按下面的说明编写一个程序,模拟网站如何确保每位用户

每个用户名都独一无二。

创建一个至少包含 5 个用户名的列表,并将其命名为 current_users。

再创建一个包含 5 用户名的列表,将其命名为 new_users,并确保其中有一两

用户名也包含在列表 current_users 中。

遍历列表 new_users,对于其中的每个用户名,都检查它是否已被使用。如果是,

就打印一条消息,指出需要输入别的用户名;否则,打印一条消息,指出这个

用户名未被使用。

确保比较时不区分大小写。换句话说,如果用户名'John'已被使用,应拒绝用

户名'JOHN'。(为此,需要创建列表 current_users 的副本,其中包含当前所有

用户名的小写版本。)

本题前三问都很简单重点是第四问创建列表current_users的副本存放current_users 的小写版本:

创建一个空的列表

current_users_lower =[]

把current_users列表中的元素转化成小写在存入新列表current_user_lower中

for user in current_users:

current_users_lower.append(user.lower())

再从new_users列表中遍历每个元素,转化成小写后再与列表current_users_lower中的元素比较

for user in new_users:

if user.lower() in current_users_lower:

print(f"{user} has been used . You need to enter another user name:")

else:

print(f"{user},Has not been used.")

练习 5-11:序数 序数表示位置,如 1st 和 2nd。序数大多以 th 结尾,只有 1、2

和 3 例外。

在一个列表中存储数字 1 9。

遍历这个列表。

在循环中使用一个 if-elif-else 结构,以打印每个数字对应的序数。输出内容

应为"1st 2nd 3rd 4th 5th 6th 7th 8th 9th",但每个序数都独占一行。

ordinals = list(range( 1,10 ))

print(ordinals)

for number in ordinals:

if number == 1 :

print(f"{number}st")

elif number == 2 :

print(f"{number}nd")

elif number == 3 :

print(f"{number}rd")

else:

print(f"{number}th")

If语句学习就到这里下面是字典的内容

字典示例

什么是字典

字典就是一系列键值对

alien_0 = {'color': 'green' , 'points': 5 }

alien_0表示字典的名称

=是为字典赋值

Python 中,字典用放在花括号{}中的一系列键值对表示

什么是键值对

{'color': 'green' , 'points': 5 }

其中‘color’是键 :后的‘green‘是值,不同的键值对有逗号隔开

键值是两个相关联的值。指定键时,Python 将返回与之相关联的值。和值之间用冒号分 隔,而键值对之间用逗号分隔。在字典中,想存储多少个键值对都可以。

访问字典中的值

我们知道了什么是字典,哪如何使用字典,首先访问字典中的值,

alien_0['points']

’points‘就是要访问的键python会返回这个键对应的值。

添加键值对

之后就是对字典就行修改了,字典是一个动态的,可随时更改

在字典中添加键值对

alien_0['x_position'] = 0

字典alien_0中创建新的键’x_position‘复制为0

修改字典中的值

添加之后就是修改字典中的值

修改字典中的值就是对字典中的已有键重新赋值

alien_0['color'] = 'yellow'

删除键值对

对于字中不再需要的信息,可使用 del 语句将相应的键值对彻底删除。使用 del 语句时,

必须指定字典名和要删除的键。

del alien_0['y_position']

由类似对象组成的字典

字典可以是由一个对象的多种信息组成也可以是,多个对象的同种信息组成。

favorite_languages = {

'jen': 'Python' ,

'sarah': 'C' ,

'edward': 'ruby' ,

'phil': ' Java'

}

举例中字典的键是不同的人, 值是编程语言

使用 get() 来访问值

alien_0.get('point' , 'No point value assigned.')

get()中的第一个参数是字典的中的键,第二个参数是指定键不存在的时候返回的值

get()的功能是取字典中的一个键如果存在就返回其值,如果不存在就返回第二个参数

练习 6-1:人 使用一个字典来存储一个熟人的信息,包括名、姓、年龄和居住的城市。该字典应包含键 first_name、last_name、age 和 city。将存储在该字典中的每项信息都打印出来。

# 创建包含4个键值对的字典person_message

person_messages = {

'first_name': 'bill' ,

'last_name' : 'gates' ,

'age': 60,

'city': 'seattle'

}

print(person_messages['first_name'])

print(person_messages['last_name'])

print(person_messages['age'])

print(person_messages['city'])

练习 6-2:喜欢的数 使用一个字典来存储一些人喜欢的数。请想出 5 个人的名字,

并将这些名字用作字典中的键;找出每个人喜欢的一个数,并将这些数作为值存储在字

典中。打印每个人的名字和喜欢的数。为了让这个程序更有趣,通过询问朋友确保数据

是真实的。

favorite_numbers = {}

"""

'bill gates': 5,

'elon musk': 10,

'steve jobs': 15,

'jeff bezos': 20,

'larry ellison': 25

"""

favorite_numbers['bill gates'] = 5

favorite_numbers['elon musk'] = 10

favorite_numbers['steve jobs'] = 15

favorite_numbers['jeff bezos'] = 20

favorite_numbers['larry ellison'] = 25

value = favorite_numbers['bill gates']

print(f"Bill Gates favorite number is {value}.")

value = favorite_numbers['elon musk']

print(f"Elon Musk favorite number is {value}.")

value = favorite_numbers['steve jobs']

print(f"Steve Jobs favorite number is {value}.")

value = favorite_numbers['jeff bezos']

print(f"Jeff Bezos favorite number is {value}.")

value = favorite_numbers['larry ellison']

print(f"Larry Ellison favorite number is {value}.")

练习 6-3:词汇表 Python 字典可用于模拟现实生活中的字典。为避免混淆,我们

将后者称为词汇表。

想出你在前面学过的 5 个编程术语,将其用作词汇表中的键,并将它们的含义

作为值存储在词汇表中。

以整洁的方式打印每个术语及其含义。为此,可先打印术语,在它后面加上一

个冒号,再打印其含义;也可在一行打印术语,再使用换行符( )插入一个

空行,然后在下一行以缩进的方式打印其含义。

glossaryes = {

'string': '字符串' ,

'comment': '注释' ,

'dictionary':'字典' ,

'list': '表' ,

'loop': '循环' ,

}

word = 'string'

print(f" {word.title()}: {glossaryes[word]}")

word = 'comment'

print(f" {word.title()}: {glossaryes[word]}")

word = 'dictionary'

print(f" {word.title()}: {glossaryes[word]}")

word = 'list'

print(f" {word.title()}: {glossaryes[word]}")

word = 'loop'

print(f" {word.title()}: {glossaryes[word]}")

遍历所有键值对

for k, v in user_0.items()

遍历2个变量一个k是用来存储键,v用来存储值的

.items()方法

字典items()以列表返回可遍历的(键,值)的元组数组

friends = ['phil' , 'sarah']

for name in favorite_languages.keys():

print(f"Hi {name.title()}.")

if name in friends:

language = favorite_languages[name]

print(f" {name.title()},I see you love {language}.")

if 'erin' not in favorite_languages.keys():

print("Erin , please take our poll!")

Favorite_languages.keys()把字典favorite_languages中的键来组成一个列

Favorite_languages.values()把字典favorite_languages中的值来组成一个列

练习 6-4:词汇表 2 现在你知道了如何遍历字典,可以整理为完成练习 6-3 而编写

的代码,将其中的一系列函数调用 print()替换为一个遍历字典中键和值的循环。确定

该循环正确无误后,再在词汇表中添加 5 个 Python 术语。当你再次运行这个程序时,

这些新术语及其含义将自动包含在输出中。

glossaryes = {

'string': '字符串' ,

'comment': '注释' ,

'dictionary':'字典' ,

'list': '表' ,

'loop': '循环' ,

}

for name , mean in glossaryes.items():

print(f"{name.title()}: {mean}")

glossaryes['function'] = '函数'

glossaryes['method'] = '方法'

glossaryes['statement'] = '语句'

glossaryes['retract'] = '缩进'

glossaryes['tuple'] = '元组'

for name , mean in glossaryes.items():

print(f"{name.title()}: {mean}")

练习 6-5:河流 创建一个字典,在其中存储三条重要河流及其流经的国家。例如,

一个键值对可能是'nile': 'egypt'。

使用循环为每条河流打印一条消息,下面是一个例子。

The Nile runs through Egypt.

使用循环将该字典中每条河流的名字打印出来。

使用循环将该字典包含的每个国家的名字打印出来。

# 创建一个空的字典rivers

rivers = {}

# 为字典rivers添入信息

rivers['nile'] = 'egupt'

rivers['amazon'] = 'brazil'

rivers['the ganges'] = 'india'

# 遍历rivers字典中的键值对

for river , state in rivers.items():

print(f"The {river.title()} runs through {state.title()}.")

for river in rivers.keys():

print(river.title())

for state in rivers.values():

print(state.title())

练习 6-6:调查 在 6.3.1 节编写的程序 favorite_languages.py 中执行以下操作。

创建一个应该会接受调查的人员名单,其中有些人已包含在字典中,而其他人

未包含在字典中。

遍历这个人员名单。对于已参与调查的人,打印一条消息表示感谢;对于还未

参与调查的人,打印一条消息邀请他参加。

favorite_languages = {

'jen': 'Python' ,

'sarah': 'C' ,

'edward': 'ruby' ,

'phil': 'Python'

}

survey_list = ['jen' , 'sarah' , 'bill' , 'musk']

for name in survey_list:

if name in favorite_languages.keys():

print(f"感谢 {name.title()}.")

else:

print(f"{name.title()},邀请你参加调查.")

嵌套

将字典完整的看成一个元素存入列表中,可在字典中嵌套列表甚至字典。

alien_0 = {'color': 'green' , 'points': 5 }

alien_1 = {'color': 'yellow' , 'points': 10 }

alien_2 = {'color': 'red' , 'points': 15 }

aliens = [alien_0 , alien_1 , alien_2]

练习 6-7:人们 在为完成练习 6-1 而编写的程序中,再创建两个表示人的字典,

然后将这三个字典都存储在一个名为 people 的列表中。遍历这个列表,将其中每个人

的所有信息都打印出来

person_0 = {

'first': 'bill' ,

'last' : 'gates' ,

'age': 60,

'city': 'seattle' ,

}

person_1 = {

'first': 'elon' ,

'last': 'musk' ,

'age': 50,

'city': 'san francisco' ,

}

person_2 = {

'first': 'jeff' ,

'last': 'bezos' ,

'age': 55,

'city': 'new york' ,

}

people = [person_0 , person_1 , person_2]

for person in people:

name = f"{person['first']} {person['last']}"

age = person['age']

city = person['city']

print(f"{name.title()} :")

print(f" Age :{age}")

print(f" City :{city.title()} ")

练习 6-8:宠物 创建多个表示宠物的字典,每个字典都包含宠物的类型及其主人

的名字。将这些字典存储在一个名为 pets 的列表中,再遍历该列表,并将有关每个宠

物的所有信息都打印出来。

# 创建一个pets的空列表

pets = []

# 创建多个宠物的字典,每个字典包含宠物类型和主人名称

pet = {

'variety': 'dog' ,

'master': 'john' ,

}

pets.append(pet)

pet = {

'variety': 'cat' ,

'master': 'jeff' ,

}

pets.append(pet)

pet = {

'variety': 'hamster' ,

'master': 'jenny' ,

}

pets.append(pet)

for pet in pets:

name = pet['master'].title()

variety = pet['variety'].title()

print(f"{name} pet is a {variety}")

John pet is a Dog

Jeff pet is a Cat

Jenny pet is a Hamster

练习 6-9:喜欢的地方 创建一个名为 favorite_places 的字典。在这个字典中,

将三个人的名字用作键,并存储每个人喜欢的 1 3 个地方。为了让这个练习更有趣些,

可以让一些朋友说出他们喜欢的几个地方。遍历这个字典,并将其中每个人的名字及其

喜欢的地方打印出来。

# 创建一个字典其中是列表镶嵌在字典中

favorite_places = {

'jeff': ['new york' , 'tokyo'] ,

'bill': ['pairs'] ,

'elon': ['london' , 'beijng' , 'hong kong'] ,

}

# 遍历字典将键赋值name 将值赋予places 赋值完name是个字符串 places是个列表

for name , places in favorite_places.items():

print(f"{name.title()}'s favorite places is :")

# 遍历列表places中的值赋予place

for place in places:

print(f" -{place}")

练习 6-10:喜欢的数 2 修改为完成练习 6-2 而编写的程序,让每个人都可以有多

个喜欢的数,然后将每个人的名字及其喜欢的数打印出来。

# 创建一个空的字典

favorite_numbers = {}

# 往字典中添加信息 ‘人名’和喜欢的数字

favorite_numbers['bill gates'] = [ 5,7 ]

favorite_numbers['elon musk'] = [ 10,13 ]

favorite_numbers['steve jobs'] = [ 15,18 ]

favorite_numbers['jeff bezos'] = [ 20,22,23 ]

favorite_numbers['larry ellison'] = [ 25,26,30,33 ]

for name , numbers in favorite_numbers.items():

print(f"{name.title()}'s favorite number is :")

for number in numbers:

print(f" -{number}")

练习 6-11:城市 创建一个名为 cities 的字典,将三个城市名用作键。对于每座

城市,都创建一个字典,并在其中包含该城市所属的国家、人口约数以及一个有关该城

市的事实。在表示每座城市的字典中,应包含 country、population 和 fact 等键。将每

座城市的名字以及有关信息都打印出来。

# 创建4个字典

cities = {}

city_01 = {}

city_02 = {}

city_03 = {}

# 给每个字典赋值

city_01['country'] = 'japan'

city_01['population'] = 13_500_000

city_01['fact'] ='The southern kanto plain of Honshu island.'

city_02['country'] = 'usa'

city_02['population'] = 10_000_000

city_02['fact'] = ' northeast of the Atlantic coast of the United States'

city_03['country'] = 'china'

city_03['population'] = 21_530_000

city_03['fact'] =' Northwest margin of north China Plain'

cities['tokyo'] = city_01

cities['new york'] = city_02

cities['beijing'] = city_03

# 遍历字典输出每个信息

for name , messages in cities.items():

name = name.title()

country = messages['country'].title()

population = messages['population']

fact = messages['fact'].title()

print(f"{name}:")

print(f" -Country:{country}")

print(f" -Population:{population}")

print(f" -Fact:{fact}")

Tokyo:

-Country:Japan

-Population:13500000

-Fact:The Southern Kanto Plain Of Honshu Island.

New York:

-Country:Usa

-Population:10000000

-Fact: Northeast Of The Atlantic Coast Of The United States

Beijing:

-Country:China

-Population:21530000

-Fact: Northwest Margin Of North China Plain