昨天没说清楚,今天再来请教一下!

2020-11-14 14:50:29 +08:00
 css3

是这样的,有多个长度一样且是偶数的 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'}]]

2188 次点击
所在节点    Python
12 条回复
yaodong
2020-11-14 14:56:35 +08:00
```
myret = [{"f1": x, "t1": y} for x, y in zip(a, b)]
```
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)
css3
2020-11-14 15:02:06 +08:00
@yaodong 老哥,不是这样😂
css3
2020-11-14 15:03:16 +08:00
@darklowly 😂第一版就是你这样,为了实现需求,才改主帖这样了
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)
JeffGe
2020-11-14 15:30:32 +08:00
……[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)……
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])]
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])]
css3
2020-11-14 16:23:05 +08:00
@darklowly
@JeffGe
@MrGba2z
老哥们,成了,感谢感谢,学习了,还是采用的 range, 关键点是 range 的步偿取 2😍
freakxx
2020-11-15 00:55:42 +08:00
我一般不会这么去写代码,感觉太硬,

我会先实现一个 chunk 方法,把长度划分成想要的长度,
然后再拼装在一起
最后再按想要的结构去做处理。

代码:
https://gist.github.com/chrisguox/030515515f64e38efced2066dee7991b
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 。
css3
2020-11-15 12:05:44 +08:00
@freakxx 感谢老哥的思路,受益匪浅👏

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/725192

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX