2013-03-12 69 views
0

我如何可以改變一個列表:列表來解釋沒有價值

['a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'g1', 'g2', 'g3', 'g4', 'g5', 'g6', 'g7', 'g8', 'g9', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7', 'h8', 'h9', 'i1', 'i2', 'i3', 'i4', 'i5', 'i6', 'i7', 'i8', 'i9'] 

到字典中沒有值:

{'a1': None, 'a2': None, 'a3': None} #etc 
+0

你確定你想要一個'dict'而不是'set'? – 2013-03-12 20:20:03

+2

只是一個尼特,但0不是'沒有價值',它是零,這可以說是不同的。在Python中,我們通常使用'None'來表示'沒有價值'。 – jimhark 2013-03-12 20:20:59

回答

8

像這樣:

dict.fromkeys(yourlist, 0) 

>>> l = ['a1', 'a2', 'a3', 'a4', ... 
>>> dict.fromkeys(l, 0) 
{'a1': 0, 'a2': 0, 'a3': 0, 'a4': 0, ... 
4

my_dict = {elem:0 for elem in my_list}

例:

In [2]: my_list = ['a1', 'a2', 'a3', 'a4'] 

In [3]: my_dict = {elem:0 for elem in my_list} 

In [4]: my_dict 
Out[4]: {'a1': 0, 'a2': 0, 'a3': 0, 'a4': 0} 
+0

+1只要你改變你的變量名稱; ;-) – DSM 2013-03-12 20:19:51

+0

@DSM哦哈哈...是的。 – 2013-03-12 20:20:13

+0

對於PEP 20來說這麼多:「應該有一個 - 最好只有一個 - 明顯的做法。」 – 2013-03-12 20:22:42

10
Docstring: 
dict.fromkeys(S[,v]) -> New dict with keys from S and values equal to v. 
v defaults to None. 

In [1]: l = ['a1', 'a2', 'a3', 'a4'] 

In [2]: dict.fromkeys(l) 
Out[2]: {'a1': None, 'a2': None, 'a3': None, 'a4': None} 

In [3]: dict.fromkeys(l, 0) 
Out[3]: {'a1': 0, 'a2': 0, 'a3': 0, 'a4': 0} 

正如評論所指出的DSM,你必須要小心設置可變對象的值,因爲它們都指向同一個對象。換一個,改變這一切:

In [5]: d = dict.fromkeys(l,[]) 

In [6]: [id(v) for v in d.values()] 
Out[6]: [171439660, 171439660, 171439660, 171439660] 

In [7]: d['a1'].append(1) 

In [8]: d 
Out[8]: {'a1': [1], 'a2': [1], 'a3': [1], 'a4': [1]} 
+1

使用'.fromkeys()'時要注意的一件事就是它不會拷貝'v',所以'len(set(map(id,dict.fromkeys(l,v).values()) ))== 1'。當'v'是不可變的時候,這很好,比如在這裏使用'0'或'None',但是會導致驚喜,否則''dict.fromkeys(l,[])'不可能是想要的東西,例如。 (我知道你知道這個,根,但是對於路人來說:^) – DSM 2013-03-12 20:27:25

+0

@DSM - 將它添加到我的答案中,並有一個說明性示例。謝謝。 – root 2013-03-12 20:35:24

+0

+1。下一次,我必須解釋多個對可變對象的引用,我正在剔除'[id(v)for v in d.values()]''。很好地說。 – jimhark 2013-03-12 23:26:04