鱼C论坛

 找回密码
 立即注册
查看: 3299|回复: 3

关于for的用法还大家帮忙请指教

[复制链接]
发表于 2018-9-14 16:37:34 | 显示全部楼层 |阅读模式
1鱼币
>>> params = {'server':'baidu', 'database':'mysql', 'pwd':'admin', 'user':'bazig'}
>>>
>>> params.keys()
dict_keys(['server', 'user', 'database', 'pwd'])
>>>
>>> params.values()
dict_values(['baidu', 'bazig', 'mysql', 'admin'])
>>>
>>> params.items()
dict_items([('server', 'baidu'), ('user', 'bazig'), ('database', 'mysql'), ('pwd', 'admin')])
>>>
>>>
>>> [v for v, k in params.items()]
['server', 'user', 'database', 'pwd']
>>>
>>> [v for k, v in params.items()]
['baidu', 'bazig', 'mysql', 'admin']
>>>
>>> [k for k, v in params.items()]
['server', 'user', 'database', 'pwd']
>>>
>>> [k for v, k in params.items()]
['baidu', 'bazig', 'mysql', 'admin']
>>>

以上是我做的实验结果,有几点疑问:
1、[v for v, k in params.items()]这个应该怎么理解呢,展开来应该是怎样的?
2、为什么[v for v, k in params.items()]和[k for k, v in params.items()]执行的结果是一样的,怎么理解?
3、上面是定义是属于列表还是字典,在哪里可以找到有比较详细的文档资料查看?

python小白一枚,还请各位大佬帮忙解释,在此先谢谢啦!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-14 19:03:35 | 显示全部楼层
本帖最后由 jackz007 于 2018-9-15 16:05 编辑

        params = {'server':'baidu', 'database':'mysql', 'pwd':'admin', 'user':'bazig'}

        这个语句定义了含有 4 个元素的字典,每个元素由 键(key):值(value) 对构成;

        元素1:key = 'server'   ,value = 'baidu'
        元素2:key = 'database' ,value = 'mysql'
        元素3:key = 'pwd'      ,value = 'admin'
        元素4:key = 'user'     ,value = 'bazig'

        params . items() 得到由全部 4 个字典元素构成的列表

        for k , v in params . items()

        由于字典的每个元素都是由 key 和 value 2 项构成,所以,for 循环相应地设置了 2 个循环变量 k 和 v,对应于每个字典元素的 key 和 value。在这里,循环变量的名字并不重要,位置(前后)关系很重要。循环中,位置靠前的 (k) 将被赋予 key,靠后 (v) 的将被赋予 value。循环次数取决于字典所含有的元素数量。字典 params 共有 4 个元素,所以,循环次数是 4 ;

        [k for k , v in params . items()] 抽取字典 params 中每个元素的键(key)构成一个列表(list);

        [v for k , v in params . items()] 抽取字典 params 中每个元素的值(value)构成一个列表(list);
        
        楼主把你的代码稍微修改试一下,写成程序运行一下,也许就会明白一些了:
#!/usr/bin/env python
#coding:gbk

params = {'server':'baidu', 'database':'mysql', 'pwd':'admin', 'user':'bazig'}

i = 1
for key , value in params . items():
    print "element%d : key = %s , value = %s" % (i , key , value)
    i += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-15 16:56:05 | 显示全部楼层
jackz007 发表于 2018-9-14 19:03
params = {'server':'baidu', 'database':'mysql', 'pwd':'admin', 'user':'bazig'}

        这 ...

现在都在学python 3.6了,对于字符的处理更便捷,省去了%d,%s,%f的类型统一用f。

#!/usr/bin/env python
#-*- coding:utf-8 -*-

params = {'server':'baidu', 'database':'mysql', 'pwd':'admin', 'user':'bazig'}

i = 1
for key , value in params.items():
    print (f"element{i} : key = {key} , value = {value}")
    i += 1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-9-18 15:18:03 | 显示全部楼层
v for v, k in params.items()时v是key,k是value
v for k, v in params.items()时v是value,k是key
你注意k,v的位置就好
不过一般都写for k,v in params.items(),k,v正好对应key,value就不容易记错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-5 21:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表