1
Takamine 2019-07-15 12:08:11 +08:00 2
# 我记得世界上最好的语言有处理这个的函数,不知道 Py 有没有。
# 这个办法好像也很蠢:doge:。 ```python list3 = [] for i, j in zip(list1, list2): i.update(j) list3.append(i) ``` |
3
rrfeng 2019-07-15 12:13:33 +08:00 via Android 1
按 id ?那把 id 当 key 扔字典里,遍历一遍 update 就行了呗
|
4
rrfeng 2019-07-15 12:15:38 +08:00 via Android
然后再整成 list。或者直接用 list,id 当索引(范围可控的话,不可控就存个 id 到 list 的索引)
不会比 pandas 差。 |
5
starsriver 2019-07-15 12:40:38 +08:00 via Android 1
定义 namebuff 和 agebuff 一维数组,用 id 作为序号索引。更新数据只需要把提取的 list 组合进去就好
|
6
txy3000 2019-07-15 12:44:53 +08:00 1
直接上代码
def func(l): return {e['id']: e for e in l} l1 = [{'id': 1, 'name': 'one'}, {'id': 2, 'name': 'two'}] l2 = [{'id': 1, 'age': 18}, {'id': 2, 'age': 17}] d1, d2 = func(l1), func(l2) l3 = list(dict(d1[i].items() | d2[i].items()) for i in d1.keys() & d2.keys()) |
7
lance86 2019-07-15 12:54:24 +08:00 1
用列表推导式?不过其实也是嵌套的 for 循环,,
[{'id': item1['id'], 'name': item1['name'], 'age': item2['age']} for item1 in list1 for item2 in list2 if item1['id'] == item2['id']] |
8
goofool 2019-07-15 13:57:39 +08:00
print(list1, list2)
list3 = copy.copy(list1) [x[0].update(x[1]) for x in zip(list3, list2)] print(list3) |
9
rrfeng 2019-07-15 14:13:10 +08:00
result = []
index = {} c = 0 for i in list1+list2: index[i['id']] = c if not resut[c]: result[c] = i else: result[c].update(i) c++ |
10
princelai 2019-07-15 15:42:39 +08:00 1
```
pd.merge(left=pd.DataFrame(list1), right=pd.DataFrame(list2),left_on='id', right_on='id').to_dict('records') ``` |