2014-02-19 41 views
6

我使用pickle.load從文件中讀取了類型collections.defaultdict的對象。它具有每個字符串鍵的數字值。它似乎就像dict類型的對象,或者我可能是錯的。將字典變成兩個列表,一個用於鍵,另一個用於值?

我想從對象中創建兩個列表,一個列表包含所有的鍵,另一個列表包含所有的值。我怎樣才能做到這一點dict類型的對象?我怎樣才能做到這一點collections.defaultdict類型的對象?

例如,來自dict

tel = {'jack': 4098, 'sape': 4139} 

類型的對象我想創建兩個列表['jack', 'sape'][4098, 4139]

謝謝!

+1

相同的順序,還是兩個列表的順序無關? – Trent

+1

相同的順序@Trent – Ben

回答

11

您可以在Python 2.x的使用:

keys = tel.keys() 
values = tel.values() 

或者時髦的東西,如:

(keys,values) = zip(*tel.iteritems()) 

而且在Python 3.X:

keys = list(tel.keys()) 
values = list(tel.values()) 
(keys,values) = zip(*tel.items()) 

(如3 .x,keys(),values()和items()返回迭代器)

+0

爲什麼不只是'list(tel.iterkeys())'? +1都一樣我沒有知道他們擺脫了py3中的另一個 –

+0

是的,好點。儘管list(tel.iterkeys())變成了tel.keys()。 – isedev

3
keys = my_dict.keys() 
vals = my_dict.values() 
keys,values = zip(*my_dict.items()) 
+0

只在Python 2中。 – isedev

+0

O我不知道這在py3中消失了 –

+0

抱歉累了...... iterkeys()在2.x = keys()在3.x – isedev

2
k = tel.keys() # a list of the dict keys 
v = tel.values() # a list of the dict values 

或者

k, v = [], [] 
for key, value in tel.items(): 
    k.append(key) 
    v.append(value) 
6

在一個步驟(Python的2.X):

keys, values = zip(*tel.iteritems()) 

或者在Python 3.X:

keys, values = zip(*tel.items()) 
0
key = [] 
value = [] 
for i,j in tel.iteritems(): 
    key.append(i) 
    value.append(j) 


key 
['sape', 'jack'] 
value 
[4139, 4098] 

ite ritems應該訣竅:)

相關問題