如果对字典列表进行快速的合并

2019-11-23 00:32:39 +08:00
 agentwx
比如这样的数据
[{"id":"abc","name":"x","pf":"1"},{"id":"abc","name":"y","pf":"2"},{"id":"abc","name":"z","pf":"1"}]
怎么快速的变成
{"id":"abc","data":[{"name":"x","pf":"1"},{"name":"y","pf":"2"},{"name":"z","pf":"1"}]}

通过遍历重组没有问题,就是觉得是不是太慢了
3452 次点击
所在节点    Python
13 条回复
diggerdu
2019-11-23 00:44:10 +08:00
用 pandas 吧
loliordie
2019-11-23 00:52:08 +08:00
把单条数据的处理函数拆出来扔给 celery 这样的多线程框架, 如果不是上百 G 这种规模一会就处理完了
66450146
2019-11-23 01:11:42 +08:00
如果对字典列表进行快速的合并,这个合并就会很快
mskf
2019-11-23 01:22:18 +08:00
对于除了 id 主键之外的字段的处理你是用的 data 字段,但是怎么知道哪些是主键哪些不是,如果有外键需不需要加进 data,如果多余字段只有一个需不需要用 data 数组存储,这些你都必须要明确
widewing
2019-11-23 02:03:03 +08:00
头大
又看到 如何->如果
就很难受
imn1
2019-11-23 02:27:28 +08:00
昨天问字典的那个是不是你?
ClericPy
2019-11-23 13:07:39 +08:00
不慢
agentwx
2019-11-23 13:29:46 +08:00
@imn1 哪里的?不是我
cherbim
2019-11-23 21:20:37 +08:00
这个昨天有人问过
yucongo
2019-11-27 12:24:04 +08:00
lst = [{"id":"abc","name":"x","pf":"1"},{"id":"abc","name":"y","pf":"2"},{"id":"abc","name":"z","pf":"1"}]

data = [dict(zip([*lst[idx].keys()][1:], [*map(lambda elm: lst[idx].get(elm), [*lst[idx].keys()][1:])])) for idx in range(3)]

{"id":"abc","data":data} #
yucongo
2019-11-27 12:35:53 +08:00
简单一点:

data = [(lambda x: x.pop('id') * False or x)(elm) for elm in lst]
{"id":"abc","data":data} #
caoyouming
2019-11-28 11:52:00 +08:00
@yucongo #11 小白有点看不懂这个代码啊,解释一下
caoyouming
2019-11-28 12:03:23 +08:00
@yucongo #11 研究了一下,看懂了。哎,python 之路还很长啊。

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

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

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

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

© 2021 V2EX