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}]