首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

python 列表表达式的写法

2013-07-04 
python 求一个列表表达式的写法a{a:[1,2,3,4], b:[5,6,7,8]}b[...]希望得到b[{a:1, b:5}, {a

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())]

热点排行