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

## 问题：如何将字典转换为元组列表？

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

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

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

If I have a dictionary like:

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

How can I convert it to this?

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

And how can I convert it to this?

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

## 回答 0

``````>>> 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')]``````

Python 3.x中，您将不使用`iteritems`（不再存在），而使用`items`，它现在返回字典项目的“视图”。看到什么新的Python 3.0文档，以及新的看法文档

1：在Python 3.7中添加了字典的插入顺序保留

``````>>> 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')]
``````

It's not in the order you want, but dicts don't have any specific order anyway.1 Sort it or organize it as necessary.

See: items(), iteritems()

In Python 3.x, you would not use `iteritems` (which no longer exists), but instead use `items`, which now returns a "view" into the dictionary items. See the What's New document for Python 3.0, and the new documentation on views.

1: Insertion-order preservation for dicts was added in Python 3.7

## 回答 1

``````>>> 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')]``````

since no one else did, I'll add py3k versions:

``````>>> 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')]
``````

## 回答 2

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

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

You can use list comprehensions.

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

will get you `[ ('a', 1), ('b', 2), ('c', 3) ]` and

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

the other example.

Read more about list comprehensions if you like, it's very interesting what you can do with them.

## 回答 3

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

``````>>> 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())``````

``````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)``

Create a list of namedtuples

It can often be very handy to use namedtuple. For example, you have a dictionary of 'name' as keys and 'score' as values like:

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

You can list the items as tuples, sorted if you like, and get the name and score of, let's say the player with the highest score (index=0) very Pythonically like this:

``````>>> player = best[0]

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

How to do this:

list in random order or keeping order of collections.OrderedDict:

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

in order, sorted by value ('score'):

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

sorted with lowest score first:

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

sorted with highest score first:

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

## 回答 4

``````Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
>>> 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')]
>>> ``````

What you want is `dict`'s `items()` and `iteritems()` methods. `items` returns a list of (key,value) tuples. Since tuples are immutable, they can't be reversed. Thus, you have to iterate the items and create new tuples to get the reversed (value,key) tuples. For iteration, `iteritems` is preferable since it uses a generator to produce the (key,value) tuples rather than having to keep the entire list in memory.

``````Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
>>> 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')]
>>>
``````

## 回答 5

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

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

and

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

## 回答 6

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

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

These are the breaking changes from Python 3.x and Python 2.x

For Python3.x use

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

For Python 2.7 use

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

## 回答 7

```>>> a = {'a'：1，'b'：2，'c'：3}

>>> [[x，a [x]）for a.keys（）中的x]
[（'a'，1），（'c'，3），（'b'，2）]

>>> [[（a [x]，x）for a.keys（）中的x]
[（1，'a'），（3，'c'），（2，'b'）]
```
```>>> 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')]
```

## 回答 8

`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')]``````

By `keys()` and `values()` methods of dictionary and `zip`.

`zip` will return a list of tuples which acts like an ordered dictionary.

Demo:

``````>>> 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')]
``````

## 回答 9

``````d = {'John':5, 'Alex':10, 'Richard': 7}
list = []
for i in d:
k = (i,d[i])
list.append(k)

print list``````
``````d = {'John':5, 'Alex':10, 'Richard': 7}
list = []
for i in d:
k = (i,d[i])
list.append(k)

print list
``````

## 回答 10

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

A simpler one would be

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