将python中的字典拆分为键和值

时间:2010-10-25 23:17:01

标签: python list dictionary

如何将字典分成两个列表,一个是键,一个是值。例如:

{'name': 'Han Solo', 'firstname': 'Han', 'lastname': 'Solo', 'age': 37, 'score': 100, 'yrclass': 10}

并将其拆分为:

['name', 'firstname', 'lastname', 'age', 'score', 'yrclass']
# and
['Han Solo', 'Han', 'Solo', 36, 100, 10]

任何想法的人?

2 个答案:

答案 0 :(得分:44)

没那么难,请在控制台中尝试help(dict)以获取更多信息:)

keys = dictionary.keys()
values = dictionary.values()

对于键和值:

items = dictionary.items()

也可以用来分割它们:

keys, values = zip(*dictionary.items())

请注意,所有这些顺序在同一个字典实例中是一致的。 Python中字典的顺序是任意的,但对于实例是不变的。

答案 1 :(得分:0)

对@Wolph答案的称赞,

重要的一点是,使用zip可能会慢很多!


添加了split_with_tuple-由于split返回了自python3起的视图对象

In [1]: def split(d):
   ...:     return d.keys(), d.values()
   ...:
   ...:

In [2]: def split_with_tuple(d):
   ...:     return tuple(d.keys()), tuple(d.values())
   ...:
   ...:

In [3]: def split_with_zip(d):
   ...:     return zip(*d.items())
   ...:
   ...:

In [4]: d = {i:str(i) for i in range(10000)}

In [5]: %timeit split(d)
265 ns ± 12.2 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)

In [6]: %timeit split_with_tuple(d)
151 µs ± 772 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)

In [7]: %timeit split_with_zip(d)
950 µs ± 15.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)