This topic created in 1613 days ago, the information mentioned may be changed or developed.
python 里如何用优雅的方式完成以下需求呢?
两个表或者两个数组
表 A 有 id(从 1 自增),name 列
表 B 有 name 列
表 B 有数据:
zhangsan
lisi
wanger
mazi
需求是把表 A 里 id 为 4 的 name 列填充为 zhangsan ,为 8 的 name 列为 lisi ,16 的 name 列为 wanger ..以此类推
for 循环的方式我能实现,想找到更简洁优雅的方式
11 replies • 2022-01-11 13:38:59 +08:00
 |
|
2
ADMlN Jan 10, 2022 1
比如: A={i:'' for i in range(1,41)} B=['zhangsan','lisi','wanger','mazi'] A.update({2**(i+2):b for i,b in enumerate(B)})
|
 |
|
3
hackpro Jan 11, 2022 via iPhone
挺有意思的问题
|
 |
|
4
AX5N Jan 11, 2022
如果用你熟悉的语言,你会怎么优雅地实现?
|
 |
|
5
soo2 Jan 11, 2022 via iPhone 1
(看到 Wanger 笑了。)
|
 |
|
6
rpman Jan 11, 2022
港真循环挺好的 嫌弃的话可以用 map
|
 |
|
7
seers Jan 11, 2022 via Android
迭代器
|
 |
|
8
raptor Jan 11, 2022 2
不怕麻烦的话,pandas 了解一下?
A 和 B 转为 pandas.DataFrame
B['id'] = [2 ** (id + 1) for id in A['id']] A.set_index(["id"], inplace=True) A.update(B.set_index(['id'])) A.reset_index(inplace=True)
|
 |
|
9
imn1 Jan 11, 2022
我简单理解你的描述,A 的 id/name 两列都可以重复的(不重复也没必要循环了),B 是各自独立不重复的
其实这个取决于 A 的格式 二维 list --> 循环 /map/lambda ,list 也没办法优雅,即使用 map 也是要执行写入时循环一遍 pandas --> mask() sql --> sql 命令
B 可以用 1.enum ,如果 B 为整数递增就 IntEnum ,如果 B 为二进制整数递增就 IntFlag 2.以数值做 key 的字典 3.pandas.Series 或 numpy 4.以位置作为索引的列表,无值的位置填入 None 当然 1 是最简单,因为 enum 可以用 key 读取 value ,也可以用 value 读取 key ,字典只能从 key 读取 value ,所以只能用数值作为 key 如果 A 是 sql ,B 可以继承 enum 并自定义一个__conform__(self, protocol)方法,方便读取|写入数据库
|
 |
|
10
Telegram Jan 11, 2022
临时用一次的就别考虑优雅了,能实现就行,浪费时间。 如果以后经常要用到,那倒是可以花点时间优化下方案。
|