是这样的,有多个长度一样且是偶数的 list,现在假设 2 个 A, B
A = [1, 2, 3, 4] B = ["a", "b", "c", "d"]
想生成一个这样类型的list
# f1 和 f2 是固定不变的, value 取自于 A, B,每一项分别对应到 f1,f2 上, 然后两两结合, 1a, 2b 一组,3c, 4d 一组,依次类推... ret = [ [{"f1":1, "t1":"a"},{"f2":2, "t2":"b"}], [{"f1":3, "t1": "c"}, {"f2":4, "t2": "d"}] ]
# 我写了个列表推导式,但结果不符合预期 myret = [ [{"f1":A[x], "t1":B[x]}, {"f2":A[x+1], "t2":B[x+1]}] for x in range(len(A)-1) ] # 它输出是这样,中间重复了,想不到再怎么处理一下了 [[{'f1': 1, 't1': 'a'}, {'f2': 2, 't2': 'b'}], [{'f1': 2, 't1': 'b'}, {'f2': 3, 't2': 'c'}], [{'f1': 3, 't1': 'c'}, {'f2': 4, 't2': 'd'}]]
1 yaodong 2020-11-14 14:56:35 +08:00 ``` myret = [{"f1": x, "t1": y} for x, y in zip(a, b)] ``` |
![]() | 2 darklowly 2020-11-14 14:59:21 +08:00 python 忘记了,你这个是逻辑错误,我按照你的语法修改了一下 A = [1, 2, 3, 4] B = ["a", "b", "c", "d"] myret = [ [{"f1":A[x], "t1":B[x]}] for x in range(len(A)) ] print(myret) |
![]() | 5 darklowly 2020-11-14 15:26:28 +08:00 哦那就是这样?? A = [1, 2, 3, 4] B = ["a", "b", "c", "d"] length = int(len(A)/2) myret = [ [{"f1":A[2*x], "t1":B[2*x]}, {"f2":A[2*x+1], "t2":B[2*x+1]}] for x in range(length) ] print(myret) |
6 JeffGe 2020-11-14 15:30:32 +08:00 via Android ……[2 * x]……[2 * x]……[2 * x + 1]……[2 * x + 1]……for x in range(len(A)//2)…… 或 ……[x]……[x]……[x + 1]……[x + 1]……for x in range(0, len(A), 2)…… |
![]() | 7 MrGba2z 2020-11-14 15:37:02 +08:00 ps = list(zip(A, B)) myret = [[{"f1": p[0], "t1": p[1]}, {"f1": ps[i+1][0], "t2":ps[i+1][1]}] for i, p in enumerate(ps[:-1])] |
![]() | 8 MrGba2z 2020-11-14 15:40:14 +08:00 额..刚才把你手头的和想要的看反了.. ps = list(zip(A, B)) myret = [[{"f1": p[0], "t1": p[1]}, {"f1": ps[2*i+1][0], "t2":ps[2*i+1][1]}] for i, p in enumerate(ps[:-1:2])] |
![]() | 9 css3 OP |
![]() | 10 metamask 2020-11-15 00:55:42 +08:00 我一般不会这么去写代码,感觉太硬, 我会先实现一个 chunk 方法,把长度划分成想要的长度, 然后再拼装在一起 最后再按想要的结构去做处理。 代码: https://gist.github.com/chrisguox/030515515f64e38efced2066dee7991b |
![]() | 11 metamask 2020-11-15 01:00:11 +08:00 > 是这样的,有多个长度一样且是偶数的 list,现在假设 2 个 A, B 我感觉像这样的需求,想法, 一般是要拆分会比较好, 像我上面写的代码, 如果需要的话,再写 一个 generate_chunk_for_fields(),return *args, 写一组 key 名, 那么以后再加什么,只是需要把东西扔进去这个定义函数, *args 也直接转进去 generate_ft_struct, 直接做匹配就 ok 。 |