一個關於字典操作的趣題。

今天看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”


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章