我有一个类似的列表:
[('A', 1), ('B', 2), ('C', 3)]
我想把它变成一个看起来像的字典:
{'A': 1, 'B': 2, 'C': 3}
最好的方法是什么?
编辑:我的元组列表实际上更像是:
[(A, 12937012397), (BERA, 2034927830), (CE, 2349057340)]
答案 0 :(得分:149)
>>> dict([('A', 1), ('B', 2), ('C', 3)])
{'A': 1, 'C': 3, 'B': 2}
答案 1 :(得分:81)
这给我带来了与尝试拆分列表并压缩它相同的错误。 ValueError:字典更新序列元素#0的长度为1916; 2是必需的
这是您的实际问题。
答案是列表中的元素不是您认为的那样。如果您输入myList[0]
,您会发现列表中的第一个元素不是两元组,例如('A', 1)
,而是1916年的可迭代。
一旦实际在您原始问题(myList = [('A',1),('B',2),...]
)中的表单中列出了一个列表,您只需要dict(myList)
。
答案 2 :(得分:27)
你试过这个吗?
>>> l=[('A',1), ('B',2), ('C',3)]
>>> d=dict(l)
>>> d
{'A': 1, 'C': 3, 'B': 2}
答案 3 :(得分:3)
这是一种处理重复的元组“键”的方法:
# 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]}
答案 4 :(得分:3)
如果元组没有键重复,那就很简单。
tup = [("A",0),("B",3),("C",5)]
dic = dict(tup)
print(dic)
如果元组具有重复键。
tup = [("A",0),("B",3),("C",5),("A",9),("B",4)]
dic = {}
for i, j in tup:
dic.setdefault(i,[]).append(j)
print(dic)
答案 5 :(得分:1)
l=[['A', 1], ['B', 2], ['C', 3]]
d={}
for i,j in l:
d.setdefault(i,j)
print(d)
答案 6 :(得分:0)
使用列表推导的另一种方式
>>> t = [('A', 1), ('B', 2), ('C', 3)]
>>> d = [{ i:j for i,j in t }]
>>> d
[{'A': 1, 'C': 3, 'B': 2}]