一个关于字典操作的趣题。

来源:互联网 发布:eclipse linux有什么好 编辑:程序博客网 时间:2024/05/17 06:55

今天看python基础教程发现一个有趣的问题.


girls=['alice','bernice','clarice']
boys=['chris','arnold','bob']
letgirls={}
for girl in girls:
    letgirls.setdefault(girl[0],girl)
print letgirls.items()
print '+++++++++++++++++++++++++++++++'
print [b+'+'+g for b in boys for g in letgirls[b[0]]]

返回

[('a', 'alice'), ('c', 'clarice'), ('b', 'bernice')]
+++++++++++++++++++++++++++++++
['chris+c', 'chris+l', 'chris+a', 'chris+r', 'chris+i', 'chris+c', 'chris+e', 'arnold+a', 'arnold+l', 'arnold+i', 'arnold+c', 'arnold+e', 'bob+b', 'bob+e', 'bob+r', 'bob+n', 'bob+i', 'bob+c', 'bob+e']

===========================================================================

girls=['alice','bernice','clarice']
boys=['chris','arnold','bob']
letgirls={}
for girl in girls:
    letgirls.setdefault(girl[0],[girl])

#换成  letgirls.setdefault(girl[0],[]).append(girl)一样


print letgirls.items()
print '+++++++++++++++++++++++++++++++'
print [b+'+'+g for b in boys for g in letgirls[b[0]]]

结果为

[('a', ['alice']), ('c', ['clarice']), ('b', ['bernice'])]
+++++++++++++++++++++++++++++++
['chris+clarice', 'arnold+alice', 'bob+bernice']



如下一段代码我一直无法理解:

arr = {}

arr.setdefault('index',[]).append('hello,word')


后来查了资料才看到如下解释:

setdefault(key[, default])

If key is in the dictionary, return its value. If not, insert key with a value of default and return default. default defaults to None.


注意红色的部分,提示了返回值。

我心中的谜团顿然被解开了,是我学习过程中,忽略了函数的返回值了。。。


其实还是思维方式没转变过来,由于长期使用php,突然看到这种obj.methods.methods.. 不习惯了,感觉某种程度上,py很相似js



我再来解释一下这段简单的代码:

arr = {}  //定义一个字典变量

arr.setdefault('index',[]).append('hello,word')  

// 前面红色部分,给arr增加一个索引(键)index,赋值为空。其结果返回赋给它的值,值为空--- 即 [] 空列表)

// 后面的,给前面的返回值[]列表里最后增加一个元素值“hello,word”


0 0
原创粉丝点击