如何将Python字典转换为元组列表?

如果我有一本像这样的字典:

{ 'a': 1, 'b': 2, 'c': 3 } 

我怎样才能把它转换成这个?

 [ ('a', 1), ('b', 2), ('c', 3) ] 

我怎样才能把它转换成这个?

 [ (1, 'a'), (2, 'b'), (3, 'c') ] 
 >>> d = { 'a': 1, 'b': 2, 'c': 3 } >>> d.items() [('a', 1), ('c', 3), ('b', 2)] >>> [(v, k) for k, v in d.iteritems()] [(1, 'a'), (3, 'c'), (2, 'b')] 

这不是你想要的顺序,但是口号也没有任何特定的顺序。 根据需要对其进行sorting或组织。

请参阅: items() , iteritems()


在Python 3.x中,您不会使用iteritems (不再存在),而是使用items ,现在会将“视图”返回到字典项目中。 请参阅Python 3.0的新增function文档以及有关视图的新文档 。

因为没有其他人做,我会添加py3k版本:

 >>> d = { 'a': 1, 'b': 2, 'c': 3 } >>> list(d.items()) [('a', 1), ('c', 3), ('b', 2)] >>> [(v, k) for k, v in d.items()] [(1, 'a'), (3, 'c'), (2, 'b')] 

您可以使用列表parsing。

 [(k,v) for k,v in a.iteritems()] 

会让你[ ('a', 1), ('b', 2), ('c', 3) ]

 [(v,k) for k,v in a.iteritems()] 

另一个例子。

如果你喜欢,可以阅读更多关于列表parsing的内容,你可以用它们做什么非常有趣。

创build一个namedtuples的列表

使用namedtuple往往是非常方便的。 例如,你有一个“名字”作为键和“分数”的字典,如:

 d = {'John':5, 'Alex':10, 'Richard': 7} 

你可以列出这些项目为元组,如果你喜欢,然后得到的名称和得分,比如我们说得分最高的玩家(指数= 0)非常像Python这样的:

 >>> player = best[0] >>> player.name 'Alex' >>> player.score 10 

如何做到这一点:

按随机顺序列出或保存集合的顺序。订购代号 :

 import collections Player = collections.namedtuple('Player', 'name score') players = list(Player(*item) for item in d.items()) 

按顺序sorting('分数'):

 import collections Player = collections.namedtuple('Player', 'score name') 

先以最低分sorting:

 worst = sorted(Player(v,k) for (k,v) in d.items()) 

按最高得分sorting:

 best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True) 

你想要的是dictitems()iteritems()方法。 items返回(键,值)元组列表。 由于元组是不可改变的,所以它们是不可逆转的。 因此,你必须迭代项目,并创build新的元组来获得反转(值,关键)元组。 对于迭代, iteritems是最好的,因为它使用生成器来生成(键,值)元组,而不必将整个列表保存在内存中。

 Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13) [GCC 4.0.1 (Apple Inc. build 5465)] on darwin Type "help", "copyright", "credits" or "license" for more information. >>> a = { 'a': 1, 'b': 2, 'c': 3 } >>> a.items() [('a', 1), ('c', 3), ('b', 2)] >>> [(v,k) for (k,v) in a.iteritems()] [(1, 'a'), (3, 'c'), (2, 'b')] >>> 
 d = {'John':5, 'Alex':10, 'Richard': 7} list = [] for i in d: k = (i,d[i]) list.append(k) print list 

通过字典和zip keys()values()方法。

zip将返回一个元组列表,其行为像一个有序的字典。

演示:

 >>> d = { 'a': 1, 'b': 2, 'c': 3 } >>> zip(d.keys(), d.values()) [('a', 1), ('c', 3), ('b', 2)] >>> zip(d.values(), d.keys()) [(1, 'a'), (3, 'c'), (2, 'b')] 
 [(k,v) for (k,v) in d.iteritems()] 

 [(v,k) for (k,v) in d.iteritems()] 
 >>> a = {'a':1,'b':2,'c':3}

 >>> [(x,a [x])用于a.keys()中的x
 [('a',1),('c',3),('b',2)]

 >>> [(a [x],x)for a.keys()中的x
 [(1,'a'),(3,'c'),(2,'b')]