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 1
算了,上贴言辞比较激烈,我就给楼主意思一下了,见下图。
我猜楼主会对这个答案不甚满意,谁叫你的题目就如此呢。 |
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 |