2017-08-16 55 views
0

我編了以下東西打印字典('one' : 1, 'tow' : 2, 'three' : 3)。但錯誤出來了。任何人都可以回答爲什麼這樣嗎?關於python字典功能

length = [] 

class_one = [1, 2, 3] 

class_two = ['one', 'two', 'three'] 

for x in class_one: 

    if x < 4: 

     length[class_two] = class_one 

print(length) 
+1

基本上'dict(zip(class_two,class_one))''。 –

+0

@AshwiniChaudhary這並沒有考慮到條件,雖然 – dhdavvie

回答

2
length = {} 

class_one = [1, 2, 3] 

class_two = ['one', 'two', 'three'] 

for c1, c2 in zip(class_one, class_two): 
    if c1 < 4: 

     length[c2] = c1 

print(length) 

在這裏,這給你所需的輸出。基本上,您正在迭代class_one,然後嘗試使用class_two的整體作爲length的關鍵字。在這裏,你遍歷兩個數組過來使用的值作爲鍵

+0

@Brick哦,那是因爲你不能使用列表作爲關鍵。你能描述一下代碼試圖做什麼嗎? – dhdavvie

+1

更改'長度[class_two] = class_one'爲'length [class_two] = x' – ikkuh

+2

@ikkuh仍然不起作用,問題是使用列表作爲關鍵 – dhdavvie

2

這裏是你的代碼的修正版本:

length = {} 
class_one = [1, 2, 3]  
class_two = ['one', 'two', 'three'] 

for i, x in enumerate(class_two): 
    length[x] = class_one[i]  
print(length) 

與您的版本的問題是:

  • ,對所述length dict (您使用的是[],這是list s;請使用{}代替。)
  • 將值分配給dict:使用who le list as key這是錯誤的,因爲list s不可排除,而不是你想要做的。

或簡單地和更優雅:

length = dict(zip(class_two, class_one)) 

這是你的情況做的最好的方式(不考慮條件)。

他們都print{'one' : 1, 'two' : 2, 'three' : 3}


最後,你可以有字典理解版本,它是這樣的:

length = {k: v for k, v in zip(class_two, class_one)} 

一個能想到的其他變化之中。請注意,這是針對您的案例過量殺毒。


有條件

至於有條件去if x < 4:不知道爲什麼你有沒有因爲與輸入,只要它沒有任何意義,但如果你確實需要它本例中,很容易重新實施。

作爲如何將看起來像看看下面的例子:

length = {k: class_one[i] for i, k in enumerate(class_two) if class_one[i] < 4} 

或較短:

length = {class_two[i]: v for i, v in enumerate(class_one) if v < 4} 

或發燒友(和甚至更短的):

length = {k: v for k, v in zip(class_two, class_one) if v < 4} 
+0

您應該在詞典理解中添加條件以顯示完整的大小寫。也許這個例子只是一個愚蠢的例子,而不是最終用例。 –

+0

投票?不知道爲什麼。但我覺得這是很好的解決方案,但很好的解釋。 我的解決方案几乎相同。 '>>> {x:i for i,x in zip(class_one,class_two)} {'three':3,'two':2,'one':1}' – Ajay2588

+0

@IgnacioVergaraKausel當然可以。 –