2014-02-19 62 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应该诀窍:)

相关问题