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

2025-03-05 09:16:00
admin
原创
81
摘要:问题描述:我有一个如下列表:[('A', 1), ('B', 2), ('C', 3)] 我想把它变成如下的字典:{'A': 1, 'B': 2, 'C': 3} 解决这个问题的最好方法是什么?编辑:我的元组列表实际上更像是:[(A, 12937012397), (BERA, 2034927830), (CE...

问题描述:

我有一个如下列表:

[('A', 1), ('B', 2), ('C', 3)]

我想把它变成如下的字典:

{'A': 1, 'B': 2, 'C': 3}

解决这个问题的最好方法是什么?

编辑:我的元组列表实际上更像是:

[(A, 12937012397), (BERA, 2034927830), (CE, 2349057340)]

我收到了错误ValueError: dictionary update sequence element #0 has length 1916; 2 is required


解决方案 1:

>>> dict([('A', 1), ('B', 2), ('C', 3)])
{'A': 1, 'C': 3, 'B': 2}

解决方案 2:

您的错误:

为什么会出现ValueError: dictionary update sequence element #0 has length 1916; 2 is required错误:

答案是,列表的元素与您想象的不同。如果您输入,myList[0]您会发现列表的第一个元素不是二元组,例如('A', 1),而是一个长度为 1916 的可迭代对象。

一旦您实际拥有了您在原始问题中所述形式的列表(myList = [('A',1),('B',2),...]),您所需要做的就是dict(myList)


[2021 年编辑:现在还回答了实际提出的问题,而不是关于具体错误的预期问题:]

一般来说:

要么使用通常的dict(iterableOrMapping) 构造函数,要么使用字典理解 {someExpr(k,v) for k:v in iterable}语法:

>>> example1 = [('A',1), ('B',2), ('C',3)]
>>> dict(example1)
{'A': 1, 'B': 2, 'C': 3}
>>> {x:x**2 for x in range(3)}
{0: 0, 1: 1, 2:4}
# inline; same as example 1 effectively. may be an iterable, such as
# a sequence, evaluated generator, generator expression

>>> dict( zip(range(2),range(2)) )
{0: 0, 1: 1, 2:2}

Python 字典是O(1) 可搜索的无序对集合 {( key→ value), ...},其中键是任何不可变对象,值是任何对象。

键必须实现.__eq__()
.__hash__()方法才能在字典中使用。如果您正在考虑实现这一点,那么您可能做错了什么,也许应该考虑使用不同的映射数据结构!(虽然有时您可以将键包装在不同的包装器结构中并使用常规字典,但这可能并不理想。)

中级或高级程序员如果想要实现“冻结”或“不可变”类型,或者伪装成这种类型,必须非常小心,否则你的程序就会出现极其微妙和几乎不可能发现的错误

如果您允许自己稍后改变对象,从而导致其相等性概念发生改变,则不能使用字典。被视为相等的对象必须始终__eq__返回 True 并__hash__返回相同的值。

这些方法必须严格遵守规范。这意味着:

  • 对于新手:哈希函数(wikip.)可让您获得假阳性或真阳性结果;hash(x)==hash(y)意味着x可能相等y,然后内部 python 代码必须检查x==y.__eq__)以确认它是真阳性而不是假阳性。这允许 O(1) 查找。

  • __hash__对于新手来说:一旦对象处于最终状态,值不会因任何原因而改变,这一点至关重要。如果你不能同时保证这一点和hash(x)!=hash(y) implies x!=y,你就不应该使用字典。

  • 你可能会考虑使用不同类型的映射,而不是修改数据本身。这相当于编写包装器对象,但代价是使用库。这通常是不必要的。

  • 对于专家:还应该注意,一些默认对象的哈希值是加盐的,并且可能会在 Python 调用和版本之间发生变化(如果您以任何包含 Python 哈希值的方式存储或网络通信数据,这可能是一个陷阱;它们是内部细节,应该在每次进程启动时重新生成)。

Python 有许多内置的冻结数据结构,例如namedtuplefrozenset等,但有时它们更难使用。tuple是基本结构的基本冻结变体list(可让您存储{(1, 2): 3, (4, 5): 6})。它还有一些dict结构的变体。如果您想获取从“冻结字典”到值的映射,frozendict 不存在,除非作为第三方库,但您可以将字典提取.items()为无序frozensettuples。

解决方案 3:

你尝试过这个吗?

>>> l=[('A',1), ('B',2), ('C',3)]
>>> d=dict(l)
>>> d
{'A': 1, 'C': 3, 'B': 2}

解决方案 4:

以下是处理重复元组“键”的一种方法:

# An example
l = [('A', 1), ('B', 2), ('C', 3), ('A', 5), ('D', 0), ('D', 9)]

# A solution
d = dict()
[d [t [0]].append(t [1]) if t [0] in list(d.keys()) 
 else d.update({t [0]: [t [1]]}) for t in l]
d

OUTPUT: {'A': [1, 5], 'B': [2], 'C': [3], 'D': [0, 9]}

解决方案 5:

如果 Tuple 没有键重复,则它很简单。

tup = [("A",0),("B",3),("C",5)]
dic = dict(tup)

如果元组有键重复。

tup = [("A",0),("B",3),("C",5),("A",9),("B",4)]
dic = {}
for i, j in tup:
    dic.setdefault(i,[]).append(j)

或者:

from collections import defaultdict
tup = [("A",0),("B",3),("C",5),("A",9),("B",4)]
dic = defaultdict(list)
for i, j in tup:
    dic[i].append(j)

解决方案 6:

另一种方法是使用字典推导,

>>> t = [('A', 1), ('B', 2), ('C', 3)]
>>> d = { i:j for i,j in t }
>>> d
{'A': 1, 'B': 2, 'C': 3}

解决方案 7:

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

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

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

云端的项目管理软件

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

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

内置subversion和git源码管理

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

免费试用