如何将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)
你想要的是dict
的items()
和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')]