Jea*_*Pat 5 python dictionary tuples
如何转换元组:
t=(('1','a'), ('1','A'), ('2','b'), ('2','B'), ('3','c'),('3', 'C'))
Run Code Online (Sandbox Code Playgroud)
进入字典:
{'1':('a','A'),'2':('b','B'),'3':('c','C')}
Run Code Online (Sandbox Code Playgroud)
我试过在控制台:
>>> d={}
>>> t[0]
(1, 'a')
>>> d[t[0][0]]=t[0][1]
>>> d
{1: 'a'}
>>> t[0][0] in d
True
>>> d[t[1][0]]=t[1][1]
>>> d
{1: 'A'}
>>> d[t[0][0]]=t[0][1]
>>> d[t[1][0]]=d[t[1][0]],t[1][1]
>>> d
{1: ('a', 'A')}
Run Code Online (Sandbox Code Playgroud)
现在,以下脚本无法完成此任务:
t=(('1','a'), ('1','A'), ('2','b'), ('2','B'), ('3','c'),('3', 'C'))
print "{'1':('a','A'),'2':('b','B'),'3':('c','C')} wanted, not:",dict(t)
d={}
for c, ob in enumerate(t):
print c,ob[0], ob[1]
if ob[0] in d:
print 'test'
d[ob[0]]=d[ob[0]],ob[1]
print d
else:
print 'else', d, ob[0],ob[1]
d[ob[0]]=d[ob[1]] # Errror is here
print d
print d
Run Code Online (Sandbox Code Playgroud)
我有错误:
Traceback (most recent call last):
File "/home/simon/ProjetPython/python general/tuple_vers_dic_pbkey.py", line 20, in <module>
d[ob[0]]=d[ob[1]]
KeyError: 'a'
Run Code Online (Sandbox Code Playgroud)
它似乎与$ >>> d [t [0] [0]] = t [0] [1] $不同.谢谢你的帮助
J.P
PS有没有更好的方法来进行转换?
您可以使用集合模块中的defaultdict(尽管它对列表更有效,而不是元组):
t=(('1','a'), ('1','A'), ('2','b'), ('2','B'), ('3','c'),('3', 'C'))
from collections import defaultdict
d = defaultdict(list)
for k, v in t:
d[k].append(v)
d = {k:tuple(v) for k, v in d.items()}
print d
Run Code Online (Sandbox Code Playgroud)
或者只是将元组添加到一起:
t = (('1','a'), ('1','A'), ('2','b'), ('2','B'), ('3','c'),('3', 'C'))
d = {}
for k, v in t:
d[k] = d.get(k, ()) + (v,)
print d
Run Code Online (Sandbox Code Playgroud)
import itertools as it
t=(('1','a'), ('1','A'), ('2','b'), ('2','B'), ('3','c'),('3', 'C'))
{k:tuple(x[1] for x in v) for k,v in it.groupby(sorted(t), key=lambda x: x[0])}
Run Code Online (Sandbox Code Playgroud)
回报
{'1': ('A', 'a'), '2': ('B', 'b'), '3': ('C', 'c')}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4358 次 |
最近记录: |