如果我有一个字典,如:
{ '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')]
它不是你想要的顺序,但是dicts无论如何都没有任何特定的顺序.1对它进行排序或根据需要进行组织。
在Python 3.x中,你不会使用iteritems
(不再存在),而是使用items
,它现在将“视图”返回到字典项中。请参阅Python 3.0的What's New文档和新的documentation on views。
1:dicts的插入顺序保存是added in Python 3.7
对于Python3.x使用
for key, value in dict.items():
temp = [key,value]
dictlist.append(temp)
对于Python 2.7使用
for key, value in dict.iteritems():
temp = [key,value]
dictlist.append(temp)
谢谢
因为没有其他人这样做,我将添加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')]
您可以使用列表推导。
[(k,v) for k,v in a.iteritems()]
会得到你[ ('a', 1), ('b', 2), ('c', 3) ]
和
[(v,k) for k,v in a.iteritems()]
另一个例子。
Read more about list comprehensions,如果你喜欢,你可以用它们做什么非常有趣。
创建一个namedtuples列表
使用namedtuple通常非常方便。例如,您有一个'name'字典作为键,'score'字符为:
d = {'John':5, 'Alex':10, 'Richard': 7}
您可以将项目列为元组,如果您愿意,可以排序,并获得名称和分数,比如说得分最高的玩家(索引= 0)非常像Python:
>>> player = best[0]
>>> player.name
'Alex'
>>> player.score
10
这该怎么做:
以随机顺序列出或保持collections.OrderedDict的顺序:
import collections
Player = collections.namedtuple('Player', 'name score')
players = list(Player(*item) for item in d.items())
按顺序排序,按值排序('得分'):
import collections
Player = collections.namedtuple('Player', 'score name')
首先按最低分数排序:
worst = sorted(Player(v,k) for (k,v) in d.items())
首先按最高分排序:
best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)
你想要的是dict
的items()
和iteritems()
方法。 items
返回(键,值)元组的列表。由于元组是不可变的,所以它们无法逆转。因此,您必须迭代项并创建新元组以获得反转(值,键)元组。对于迭代,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')]
>>>
[(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]) for x in a.keys() ] [('a', 1), ('c', 3), ('b', 2)] >>> [(a[x],x) for x in a.keys() ] [(1, 'a'), (3, 'c'), (2, 'b')]
通过keys()
和values()
字典和zip
的方法。
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')]
d = {'John':5, 'Alex':10, 'Richard': 7}
list = []
for i in d:
k = (i,d[i])
list.append(k)
print list