是这样的,有多个长度一样且是偶数的 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
freakxx 2020-11-15 00:55:42 +08:00
我一般不会这么去写代码,感觉太硬,
我会先实现一个 chunk 方法,把长度划分成想要的长度, 然后再拼装在一起 最后再按想要的结构去做处理。 代码: https://gist.github.com/chrisguox/030515515f64e38efced2066dee7991b |
11
freakxx 2020-11-15 01:00:11 +08:00
> 是这样的,有多个长度一样且是偶数的 list,现在假设 2 个 A, B
我感觉像这样的需求,想法, 一般是要拆分会比较好, 像我上面写的代码, 如果需要的话,再写 一个 generate_chunk_for_fields(),return *args, 写一组 key 名, 那么以后再加什么,只是需要把东西扔进去这个定义函数, *args 也直接转进去 generate_ft_struct, 直接做匹配就 ok 。 |