python的dictionary的多个value问题

如果有个list:[[1,2,3,4],['a','b','c','d'],['e','f','g','h']],要把它写成dictionary的形式:{1:['a','... 如果有个list:[[1,2,3,4],['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']], 要把它写成dictionary的形式:{1:['a', 'e'], 2:['b', 'f'], 3:['c', 'g'], 4: ['d', 'h']}, 要怎么写~~~ 展开
 我来答
yang_bigarm
2013-12-03 · TA获得超过3949个赞
知道大有可为答主
回答量:1664
采纳率:100%
帮助的人:619万
展开全部
用zip函数就能搞定

>>> a=[[1,2,3,4],['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']]

用一次zip函数,你发现,数组里的数字两两合并到了一起

>>> zip(a[1],a[2])
[('a', 'e'), ('b', 'f'), ('c', 'g'), ('d', 'h')]

用2次zip函数,就得到了你希望的数据,唯一不同的是,这个不是一个dictionary形式
>>> zip(a[0],zip(a[1],a[2]))
[(1, ('a', 'e')), (2, ('b', 'f')), (3, ('c', 'g')), (4, ('d', 'h'))]

然后你再调用dictionary的构造函数就OK了
>>> dict(zip(a[0],zip(a[1],a[2])))
{1: ('a', 'e'), 2: ('b', 'f'), 3: ('c', 'g'), 4: ('d', 'h')}
更多追问追答
追问
问下如果不用zip能做吗
追答
如果不用zip,那就自己写个循环啦,就像这样:

>>> d={}
>>> for i in range(len(a[0])):
d[a[0][i]] = [a[1][i],a[2][i]]

可是你为何不用zip呢?用python最大的好处就是它给你提供了很多便利的函数,你不愿意用这些函数,那学习python的意义在什么地方呢?
mlxiaucn230427
2013-12-03 · TA获得超过109个赞
知道答主
回答量:8
采纳率:0%
帮助的人:5.7万
展开全部
li=[[1,2,3,4],['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']]
D = {}
for i in li[0]:
    D[i] = [li[1][i-1],li[2][i-1]]
print D

>>> {1: ['a', 'e'], 2: ['b', 'f'], 3: ['c', 'g'], 4: ['d', 'h']}
追问
额,如果li里的list个数是不确定的要怎么写呢
追答
li=[[1,2,3,4],['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h'],['i','j','k','l']]
D = {}
for i in li[0]:
    D[i] = [item[i-1] for item in li[1:]]
print D

>>> {1: ['a', 'e', 'i'], 2: ['b', 'f', 'j'], 3: ['c', 'g', 'k'], 4: ['d', 'h', 'l']}
li里面你任意添加list都行,你试试看
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
tim_spac
2013-12-03 · TA获得超过3628个赞
知道大有可为答主
回答量:1804
采纳率:100%
帮助的人:2014万
展开全部
>>> lst = [[1,2,3,4],['a', 'b', 'c', 'd'], ['e', 'f', 'g', 'h']]
>>> dict([(x[0], x[1:]) for x in zip(*lst)])
{1: ('a', 'e'), 2: ('b', 'f'), 3: ('c', 'g'), 4: ('d', 'h')}
>>>
追问
问下如果不用zip的话怎么写呢
追答
d = {}
for i, k in enumerate(lst[0]):
d[k] = (lst[1][i], lst[2][i])
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式