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

mik*_*ike 197 python compatibility list iterable-unpacking

如果我有一个字典,如:

{ 'a': 1, 'b': 2, 'c': 3 }
Run Code Online (Sandbox Code Playgroud)

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

[ ('a', 1), ('b', 2), ('c', 3) ]
Run Code Online (Sandbox Code Playgroud)

我怎么能把它转换成这个?

[ (1, 'a'), (2, 'b'), (3, 'c') ]
Run Code Online (Sandbox Code Playgroud)

Dev*_*rre 338

>>> 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')]
Run Code Online (Sandbox Code Playgroud)

它不是你想要的顺序,但是dicts无论如何都没有任何特定的顺序.1根据需要对其进行排序或组织.

请参阅:items(),iteritems()


在Python 3.x中,您不会使用iteritems(不再存在),而是使用items,现在将"视图"返回到字典项中.看到什么新的Python 3.0文档,以及新的看法文档.

1:在Python 3.7中添加了dicts的插入顺序保存

  • items()返回python3中的dict_keys视图.将此调用包含到列表"list()"中.请参阅@ SilentGhost的回复 (5认同)

Sil*_*ost 49

因为没有其他人这样做,我将添加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')]
Run Code Online (Sandbox Code Playgroud)


mpe*_*son 18

您可以使用列表推导.

[(k,v) for k,v in a.iteritems()] 
Run Code Online (Sandbox Code Playgroud)

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

[(v,k) for k,v in a.iteritems()] 
Run Code Online (Sandbox Code Playgroud)

另一个例子.

如果您愿意,请阅读有关列表推导的更多信息,您可以使用它们进行操作非常有趣.


Rem*_*emi 10

创建一个namedtuples列表

使用namedtuple通常非常方便.例如,您有一个'name'字典作为键,'score'字符为:

d = {'John':5, 'Alex':10, 'Richard': 7}
Run Code Online (Sandbox Code Playgroud)

您可以将项目列为元组,如果您愿意,可以排序,并获得名称和分数,让我们说得分最高的玩家(索引= 0)非常像Python:

>>> player = best[0]

>>> player.name
        'Alex'
>>> player.score
         10
Run Code Online (Sandbox Code Playgroud)

这该怎么做:

按随机顺序列出或保持collections.OrderedDict的顺序:

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

按顺序排序,按值排序('得分'):

import collections
Player = collections.namedtuple('Player', 'score name')
Run Code Online (Sandbox Code Playgroud)

首先按最低分数排序:

worst = sorted(Player(v,k) for (k,v) in d.items())
Run Code Online (Sandbox Code Playgroud)

首先按最高分排序:

best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)
Run Code Online (Sandbox Code Playgroud)


Bar*_*ark 7

你想要的是dictitems()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')]
>>> 
Run Code Online (Sandbox Code Playgroud)


Rob*_*ney 6

[(k,v) for (k,v) in d.iteritems()]
Run Code Online (Sandbox Code Playgroud)

[(v,k) for (k,v) in d.iteritems()]
Run Code Online (Sandbox Code Playgroud)

  • "[(k,v)for(k,v)in d.iteritems()]"与d.items()相当可怕 (7认同)

Tes*_*ter 5

这些是 Python 3.x 和 Python 2.x 的重大变化

对于 Python3.x 使用

dictlist = []
for key, value in dict.items():
    temp = [key,value]
    dictlist.append(temp)
Run Code Online (Sandbox Code Playgroud)

对于 Python 2.7 使用

dictlist = []
for key, value in dict.iteritems():
    temp = [key,value]
    dictlist.append(temp)
Run Code Online (Sandbox Code Playgroud)