读书人

python 列表表达式的写法

发布时间: 2013-07-04 11:45:40 作者: rapoo

python 求一个列表表达式的写法
a={'a':[1,2,3,4], 'b':[5,6,7,8]}

b=[...]

希望得到b=[{'a':1, 'b':5}, {'a':2, 'b':6}, {'a':3, 'b':7}, {'a':4, 'b':8}] 列表表达式?字典?zip
[解决办法]
没想出来怎么用zip
用了一个粗暴的方法


a={'a':[1,2,3,4], 'b':[5,6,7,8]}
b=[{'a':1, 'b':5}, {'a':2, 'b':6}, {'a':3, 'b':7}, {'a':4, 'b':8}]

retval = []

i = 0
for groups in range(len(a.values()[0])):
tmpDict = {}
for eachKey in a.keys():
tmpDict[eachKey] = a[eachKey][groups]
retval.append(tmpDict)

assert retval == b
[解决办法]
#哈 哈 哈 100分啊 !关键在于函数参数中的* ,可以解开list ,当然 还有zip map lambda dict list等!
>>> a={'a':[1,2,3,4],'b':[5,6,7,8],'d':[9,0,10,11],'e':[12,13,14,15,16]}
>>> print(list( map(lambda b:dict(zip(a,b)),zip(*a.values()))))
[{'a': 1, 'b': 5, 'e': 12, 'd': 9}, {'a': 2, 'b': 6, 'e': 13, 'd': 0}, {'a': 3, 'b': 7, 'e': 14, 'd': 10}, {'a': 4, 'b': 8, 'e': 15, 'd': 11}]

[解决办法]


In [167]: a={'a':[1,2,3,4], 'b':[5,6,7,8]}

In [168]: b = [{k: a[k][i] for k in a} for i in range(len(a.values()[0]))]

In [169]: b
Out[169]: [{'a': 1, 'b': 5}, {'a': 2, 'b': 6}, {'a': 3, 'b': 7}, {'a': 4, 'b': 8}]

[解决办法]
引用:
Quote: 引用:

b = [{'a': x, 'b': y} for x,y in zip(*a.values())]



这个a有更多项就不好使了


题目也没说 a 可能有多项啊~~
参考上面的各种答案后:

b = [dict(zip(a.keys(), v)) for v in zip(*a.values())]

读书人网 >perl python

热点推荐