如何将字典转换为元组列表?
- 2025-03-04 08:25:00
- admin 原创
- 92
问题描述:
如果我有一本这样的字典:
{'a': 1, 'b': 2, 'c': 3}
我怎样才能将其转换为这个?
[('a', 1), ('b', 2), ('c', 3)]
我怎样才能将其转换为这个?
[(1, 'a'), (2, 'b'), (3, 'c')]
解决方案 1:
>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> list(d.items())
[('a', 1), ('c', 3), ('b', 2)]
对于 Python 3.6 及更高版本,列表的顺序与您预期的一致。
在 Python 2 中,您不需要list
。
解决方案 2:
由于没有其他人这样做,我将添加 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')]
解决方案 3:
您可以使用列表推导。
[(k,v) for k,v in a.iteritems()]
会让你[ ('a', 1), ('b', 2), ('c', 3) ]
和
[(v,k) for k,v in a.iteritems()]
另一个例子。
如果您愿意,请阅读有关列表推导的更多信息,使用它们可以做的事情非常有趣。
解决方案 4:
创建命名元组列表
使用namedtuple通常非常方便。例如,你有一个以 'name' 作为键、以 'score' 作为值的字典,例如:
d = {'John':5, 'Alex':10, 'Richard': 7}
您可以将项目列为元组,如果愿意的话可以进行排序,然后获取姓名和分数,比如说得分最高的玩家(索引=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())
按顺序,按值排序(“分数”):
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)
解决方案 5:
[(k,v) for (k,v) in d.iteritems()]
和
[(v,k) for (k,v) in d.iteritems()]
解决方案 6:
您想要的是dict
和items()
方法iteritems()
。items
返回 (key,value) 元组列表。由于元组是不可变的,因此它们不能被反转。因此,您必须迭代项目并创建新的元组以获取反转的 (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')]
>>>
解决方案 7:
这些是 Python 3.x 和 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)
解决方案 8:
>>> a={'a': 1, 'b': 2, 'c': 3 }
>>> [(x,a[x]) 对于 x 在 a.keys() 中]
[('a',1), ('c',3), ('b',2)]
>>> [(a[x],x) 对于 x 在 a.keys() 中]
[(1,'a'), (3,'c'), (2,'b')]
解决方案 9:
通过字典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')]
解决方案 10:
另一种方法是
list(dictionary.items()) # list of (key, value) tuples
list(zip(dictionary.values(), dictionary.keys())) # list of (value, key) tuples
解决方案 11:
d = {'John':5, 'Alex':10, 'Richard': 7}
list = []
for i in d:
k = (i,d[i])
list.append(k)
print list
解决方案 12:
Python3dict.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'>
解决方案 13:
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())
x[1] : 值
x[0] : 键
步骤 1 将创建一个包含 (value,key) 形式对的元组列表,例如 (4,'c')
step2 = sorted(step1,key=lambda x : x[0])
步骤2 从步骤1中获取输入并使用元组的第一个值进行排序
扫码咨询,免费领取项目管理大礼包!