Python 多个列表相加怎么写

2020-10-22 15:08:53 +08:00
 JCZ2MkKb5S8ZX9pq
# 伪数据。从 excel 返回内容,字典形式,表名是 key,内容是 value 。内容里每行一个 json 。
data = read_excel(a)

excel 的内容是 
[
  [表 1 的各行
    {1a:1,1b:2,1c:3,...},
    {1a2:1,1b2:2,1c2:3,...},
    ...
  ],
  [表 2 的各行],
  ...,
  [表 N 的各行]
]
也就是一个 2 层的数组

现在想获取的是,把第二层都拼成一个数组。也就是类似
itertools.chain(**data)

或者
new = []
for sheet in data:
  new += sheet

还有什么写法比较好?

2693 次点击
所在节点    Python
15 条回复
airdge
2020-10-22 15:20:51 +08:00
sum(data.values())
EggtartZ
2020-10-22 15:32:56 +08:00
意思是要把一个列表的字典合并成一个字典?
cryingsky
2020-10-22 15:35:55 +08:00
flatten
hmdsw
2020-10-22 15:40:06 +08:00
pandas
TimePPT
2020-10-22 15:43:44 +08:00
字典粗暴合并如果存在两个字典有一样的 key 会丢数据吧,除非合并后同 key 的 value 合并成列表之类的。那这样还是两层。
sudoy
2020-10-22 15:47:59 +08:00
```
>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 3, 'c': 4}
>>> z = {**x, **y}
>>> z
{'c': 4, 'a': 1, 'b': 3}
```
iblislsy
2020-10-22 17:18:15 +08:00
sum([[1,2,3],[3,4,5]],[])
这题完结
JCZ2MkKb5S8ZX9pq
2020-10-22 18:37:16 +08:00
@iblislsy 原来 sum 还有第二个参数,一直没这么用过。
JCZ2MkKb5S8ZX9pq
2020-10-22 18:39:49 +08:00
@iblislsy

如果不加第二个参数,会报类型错误,这个怎么理解?
我本来感觉,它是把第一个参数的 list[0] 作为初始值,然后 list[0]+list[1]+...+list[n]的。但好像一定要带上第二个 start 参数,定义一个空列表?
BBCCBB
2020-10-22 18:48:41 +08:00
sum 的第二个参数默认为 0,, 不指定的话就是 0, 所以类型不匹配.
wuwukai007
2020-10-22 18:57:12 +08:00
list(chain(*youlist))
from itertools import chain
kaitolucifer
2020-10-22 19:29:10 +08:00
The issue of quadratic performance of sum(sequences, null_seq) is known, which is why the doc says that sum() is for numbers and recommends .join for strings and itertools.chain for other sequences.

上面那个 sum trick 貌似很慢?
owtotwo
2020-10-22 20:01:11 +08:00
itertools.chain.from_iterable 应该可以?
lithbitren
2020-10-22 23:18:21 +08:00
印象中测过 chain 最快,sum 次之,循环最慢
billgreen1
2020-10-23 07:25:43 +08:00
建议考虑一下 pandas

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

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

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

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

© 2021 V2EX