python百例练习之第三例-字典dict()

问题

使用给定的整数n,编写程序以生成包含(i,i * i)的字典,该字典为1到n之间的整数(都包括在内)。然后程序应打印字典。

假设输入:8
然后,输出应为:{1:1、2:4、3:9、4:16、5:25、6:36、7:49、8:64}

提示:
如果将输入数据提供给问题,则应假定它是控制台输入。
考虑使用dict()

我所编写的程序

def zidian(n):     #由于第二例我直接用的for循环跟原答案比太低端了,而且我认为应该锻炼一下运用函数的能力,所以我使用了函数
    l = {}      #创建一个空字典
    for i in range(n):   #利用for循环为字典添加键值对
        l[i+1] = (i+1)*(i+1)
    return l         #直接返回值到调用的地方
n = int(input('请输入数字:'))
print(zidian(n))

原问题答案

n=int(raw_input())
d=dict()
for i in range(1,n+1):
    d[i]=i*i
print d

在这里用到了dict()函数,dict()函数是用来创建字典的,那么具体的用法是什么呢?

语法:dict(key/value)
key/value – 用于创建字典的键/值对,此处可以表示键/值对的方法有很多,具体可参考下方示例。

eg:

dict0 = dict()  # 传一个空字典
print('dict0:', dict0)
输出:dict0: {}
dict1 = dict({'three': 3, 'four': 4})  # 传入一个字典
print('dict1:', dict1)
输出:dict1: {'four': 4, 'three': 3}
dict2 = dict(five=5, six=6)  # 传入键值对,并生成字典
print('dict2:', dict2)
输出:dict2: {'five': 5, 'six': 6}
dict3 = dict([('seven', 7), ('eight', 8)])  # 传入一个包含一个或多个元祖的列表,每个元组内包含一个两个元素,并生成键值对,返回一个字典
print('dict3:', dict3)
输出:dict3: {'seven': 7, 'eight': 8}
dict5 = dict(zip(['eleven', 'twelve'], [11, 12]))  # 传入一个zip()函数,并生成字典
print('dict5:', dict5)
输出:dict5: {'twelve': 12, 'eleven': 11}

在这个例子中还提到了zip()函数,那zip()函数又是什么呢?

zip()函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。

eg:

x = [1, 2, 3]
y = [4, 5, 6]
z = [7, 8, 9]
xyz = zip(x, y, z)
print xyz    #从结果可以看到,zip()是取每个列表的相同角标的元素组成元组
输出结果为:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]

x = [1, 2, 3]
y = [4, 5, 6, 7]
xy = zip(x, y)
print xy    #在组成元组的时候,若列表长度不同,则按照最短的列表为限,长的列表多余的部分直接舍弃
输出结果为:[(1, 4), (2, 5), (3, 6)]

x = [1, 2, 3]
x = zip(x)
print x   #即便只有一个列表也会按照元组去重组,所以zip()函数的本质就是把拿到的列表组成元组放在一个列表内
输出结果为:[(1,), (2,), (3,)]

x = zip()
print x   #产生了一个空列表
输出结果为:[]

x = [1, 2, 3]
y = [4, 5, 6] 
z = [7, 8, 9] 
xyz = zip(x, y, z) 
u = zip(*xyz) 
print u
输出结果为:[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
一般认为这是一个unzip的过程,它的运行机制是这样的:
在运行zip(*xyz)之前,xyz的值是:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
那么,zip(*xyz) 等价于 zip((1, 4, 7), (2, 5, 8), (3, 6, 9))
所以,运行结果是:[(1, 2, 3), (4, 5, 6), (7, 8, 9)],python中的*号 删除可以看这里
注:在函数调用中使用*list/tuple的方式表示将list/tuple分开,作为位置参数传递给对应函数(前提是对应函数支持不定个数的位置参数)
*用于参数前面,表示传入的多个参数将按照元组的形式存储,是一个元组

x = [1, 2, 3]
r = zip(* [x] * 3)
print r
输出结果为:[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
它的运行机制是这样的:
[x]生成一个列表的列表,它只有一个元素x
[x] * 3生成一个列表的列表,它有3个元素,[x, x, x]
zip(* [x] * 3)的意思就明确了,zip(x, x, x)

持续更新中,如果存在哪些问题,希望大家能及时指出,我一定会及时修改!

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值