字典生成式和列表生成式很类似,下面用几个例题来对其进行理解:
1. 假设有20个学生,成绩在[60,100]之间,筛选并打印出90分以上的学生序号:
## 第一步,我们先模拟出班级中20个学生的成绩:
import random
d1 = {}
for i in range(1, 21):
name = 'westos' + str(i) ## 学生班级序号
score = random.randint(60, 100) ## 随机产生分数
d1[name] = score
print(d1)
## 第二步,用字典生成式筛选并打印出90分以上学生的班级序号:
d2 = {name for name,score in d1.items() if score >= 90}
print(d2)
运行结果;
2. 将字典d1中的所有key值转化为大写,d1 = dict(a=1, b=2):
## 方法一: 通过定义一个新字典d_new, 然后利用字典的for循环遍历整个字典,然后将原字典改成符合题目中条件的字典:
d1 = dict(a=1, b=2)
print(d1)
d_new = {}
for i in d1:
d_new[i.upper()] = d1[i]
print(d_new)
## 方法二: 利用字典生成式:
d_new = {}
# d2 = {d_new[i.upper()] = d1[i] for i in d1 } ## 错误方式,留下反省!!!
d3 = {i.upper():v for i,v in d1.items()}
print(d3)
3. 将如下字典种的大小写key值合并,统一以小写输出:(将原字典中的大写的key值转化为小写,并将key值相同的项的):
d = dict(a=1, b=2, c=3, B=5, C=7, D=9)
方法一:
new_d = {}
for k,v in d.items():
low_k = k.lower()
if low_k not in new_d:
new_d[low_k] = v
else:
new_d[low_k] += v
print(new_d)
方法二: 字典生成式的做法。 牛皮牛皮! 这得把字典用的非常熟,才能用出来。
new_d = {i.lower():d.get(i.lower(),0) + d.get(i.upper(),0) for i in d}
print(new_d)
4. 你还可以快速对换一个字典的键和值:
{v:k for k,v in some_dict.items()}