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

2025-03-04 08:25:00
admin
原创
91
摘要:问题描述:如果我有一本这样的字典:{'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}

我怎样才能将其转换为这个?

[('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:

您想要的是dictitems()方法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中获取输入并使用元组的第一个值进行排序

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   4008  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   2751  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Freshdesk、ClickUp、nTask、Hubstaff、Plutio、Productive、Targa、Bonsai、Wrike。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在项目管理过程中面临着诸多痛点,如任务分配不...
项目管理系统   86  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Monday、TeamGantt、Filestage、Chanty、Visor、Smartsheet、Productive、Quire、Planview。在当今快速变化的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多项目经理和团队在管理复杂项目时,常...
开源项目管理工具   97  
  本文介绍了以下10款项目管理软件工具:禅道项目管理软件、Smartsheet、GanttPRO、Backlog、Visor、ResourceGuru、Productive、Xebrio、Hive、Quire。在当今快节奏的商业环境中,项目管理已成为企业成功的关键因素之一。然而,许多企业在选择项目管理工具时常常面临困惑:...
项目管理系统   85  
热门文章
项目管理软件有哪些?
曾咪二维码

扫码咨询,免费领取项目管理大礼包!

云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用