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

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

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

我怎么把它转换成这个?

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

我怎么把它转化成这个?

[(1, 'a'), (2, 'b'), (3, 'c')]
221694 次浏览
>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> list(d.items())
[('a', 1), ('c', 3), ('b', 2)]

适用于Python 3.6及更高版本,列表的顺序是你所期望的。

在Python 2中,你不需要list

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

而且

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

你需要的是dictitems()iteritems()方法。items返回一个(键,值)元组列表。因为元组是不可变的,所以它们不能被反转。因此,您必须迭代这些项并创建新的元组以获得反向的(value,key)元组。对于迭代,iteritems更可取,因为它使用生成器来生成(key,value)元组,而不必将整个列表保存在内存中。

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 a.iteritems()]

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

[(v,k) for k,v in a.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')]

因为没有人这样做,我将添加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')]

创建一个命名元组列表

使用namedtuple通常非常方便。例如,你有一个字典,'name'作为键,'score'作为值,如下所示:

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

你可以以元组的形式列出这些项目,如果你喜欢的话可以进行排序,然后得到名字和分数,比如得分最高的球员(index=0),非常python化:

>>> player = best[0]


>>> player.name
'Alex'
>>> player.score
10

怎么做:

个集合。OrderedDict < / >:

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

按值('score')排序:

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)

通过字典的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

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

Python3。x使用

dictlist = []
for key, value in dict.items():
temp = [key,value]
dictlist.append(temp)

对于Python 2.7使用

dictlist = []
for key, value in dict.iteritems():
temp = [key,value]
dictlist.append(temp)

另一个选择是

list(dictionary.items())  # list of (key, value) tuples
list(zip(dictionary.values(), dictionary.keys()))  # list of (value, key) tuples

Python3 dict.values()不返回列表。这是一个例子

mydict = {
"a": {"a1": 1, "a2": 2},
"b": {"b1": 11, "b2": 22}
}


print(mydict.values())
> output: dict_values([{'a1': 1, 'a2': 2}, {'b1': 11, 'b2': 22}])


print(type(mydict.values()))
> output: <class 'dict_values'>


print(list(mydict.values()))
> output: [{'a1': 1, 'a2': 2}, {'b1': 11, 'b2': 22}]


print(type(list(mydict.values())))
> output: <class 'list'>
x = {'a': 1, 'b': 2, 'c': 4, 'd':3}
sorted(map(lambda x : (x[1],x[0]),x.items()),key=lambda x : x[0])

让我们把上面的代码分解成几个步骤

step1 = map(lambda x : (x[1],x[0]),x.items())
< p > x[1]:值
x[0]: Key . x[0]: Key . x

Step1将创建一个元组列表,其中包含(value,key)形式的对,例如(4,'c')

step2 = sorted(step1,key=lambda x : x[0])

Step2从步骤1中获取输入,并使用元组的第一个值进行排序