
1 cvv 2016-09-23 20:47:39 +08:00 需求不明确,单从你写的例子上看根本不复杂,另外也没说明语言限制 硬要说思路, for*2 、 if 、 merge … |
2 idamien 2016-09-23 21:01:28 +08:00 for for algorithme |
3 ldbC5uTBj11yaeh5 2016-09-23 21:49:33 +08:00 我知道一个不错技巧来解决这个问题,但是楼主你给的例子故意抹掉的太多信息,所以我偏不告诉你。 比如,{'id':1, 'abc':'2'} 这是个无序字典,没有显而易见的顾虑可以对应目标数组。明显是你抹掉信息了。 |
4 ldbC5uTBj11yaeh5 2016-09-23 22:01:01 +08:00 算了,上贴言辞比较激烈,我就给楼主意思一下了,见下图。 我猜楼主会对这个答案不甚满意,谁叫你的题目就如此呢。 |
5 moyang 2016-09-23 22:38:05 +08:00 都不说结果要不要 sorted by id ,也不说 input 是不是 sorted by id... |
6 huntzhan 2016-09-23 23:03:29 +08:00 ......感觉既不特别也不难呀 |
7 billlee 2016-09-24 00:26:26 +08:00 def group(iterable): for key, values in itertools.groupby(iterable, lambda x: x['id']): yield {'id': key, 'abc': [item['abc'] for item in values]} |
8 Perry 2016-09-24 00:31:45 +08:00 via iPhone 如果 t2 的 abc 都是 array 的话就简单了 |
9 flyeblue 2016-09-24 00:56:59 +08:00 楼主的意思应该是那个 id 数量不定, list 的大小不定吧,我琢磨了半天只得一个笨办法: t1 = [{'id': 1, 'abc': '2'}, {'id': 1, 'abc': '3'}, {'id': 2, 'abc': '2'}] idmax = len(t1) + 1 aa = idmax*[None, ] for ll in t1: ii = ll["id"] cc = ll["abc"] if aa[ii]: temp = aa[ii] else: temp = [] temp.append(cc) aa[ii] = temp[:] t2 = list() for ll in range(idmax): temp = dict() if aa[ll]: temp["id"] = ll temp["abc"] = aa[ll] t2.append(temp) print(t2) |
10 Lime 2016-09-24 01:22:24 +08:00 t1 = [{"id": 1, "abc": "2"}, {"id": 1, "abc": "3"}, {"id": 2, "abc": "2"}] print [{"id": k, "abc": (lambda v: [item["abc"] for item in v] if len(v) > 1 else v[0]["abc"])(list(group))} for k, group in itertools.groupby(t1, lambda item: item["id"])] |
11 Lime 2016-09-24 01:24:48 +08:00 |
17 wizardforcel 2016-09-24 11:31:10 +08:00 感觉 t2 很不高效,为什么不是 {1: {'abc': ['2','3']}, 2: {'abc': ['2']}} |
19 BingoXuan 2016-09-24 12:09:46 +08:00 我会考虑用 pandas 的 from_dict 转换成 DataFrame 。然后进行检索合并。不过如果字典本身就是乱序的话,就要加个正则筛选再按列排序。 |
20 bjjvvv 2016-09-24 13:51:20 +08:00 其实可以简化一下 就是 [{1: '2'}, {1: '3'}, {2: '2'}] -> {1: ['2', '3'], 2: ['2']} https://gist.github.com/bjjvvv/e2db0d7c4e77776e5c0eddb4fc01b73b |
21 wuxc 2016-09-25 19:14:51 +08:00 辅助字典纪录 id 在第二个 array 中的 index 。 需要排序的话转换完排就行。 |
22 wnduan 2016-09-26 06:47:03 +08:00 也是初学 Python ,很多库、函数、方法都不熟。搞个直观暴力的方法试试。 https://gist.github.com/wnduan/892c4b3abc5a33abcc2351ba1bd1f997 |