0

たとえば、リストのリストがありました

res = [[None,'A','B'],[19980228, 'd1', 't1'],[19980302, 'd2', 't2'],[19980303, 'd3', 't3']]

ここで、上記の結果を次のようなタプルのリストの辞書として組み立てる必要があります

{'A': [(19980228, 'd1'), (19980302, 'd2'), (19980303, 'd3')], 
 'B': [(19980228, 't1'), (19980302, 't2'), (19980303, 't3')]}

このコンセプトを教えてください。よろしくお願いします。

4

3 に答える 3

2
>>> res = [[None,'A','B'],[19980228, 'd1', 't1'],[19980302, 'd2', 't2'],[19980303, 'd3', 't3']]
>>> {a:[(r[0], r[i]) for r in res[1:]] for i, a in enumerate(res[0]) if a}
{'A': [(19980228, 'd1'), (19980302, 'd2'), (19980303, 'd3')], 'B': [(19980228, 't1'), (19980302, 't2'), (19980303, 't3')]}

注:@shuzOMGchenが指摘しているように、これにはpython 2.7および3.0で追加された「辞書内包表記」が必要です。したがって、以前のバージョンを使用している場合は、コードを少し変更する必要があります。ここでは、dictの理解を使用していません(かなり醜いです、私は上からロジックをコピーしようとしました)

>>> res = [[None,'A','B'],[19980228, 'd1', 't1'],[19980302, 'd2', 't2'],[19980303, 'd3', 't3']]
>>> d = {}
>>> for i, a in enumerate(res[0]):
...     if a:
...         d[a] = [(r[0], r[i]) for r in res[1:]]
... 
>>> d
{'A': [(19980228, 'd1'), (19980302, 'd2'), (19980303, 'd3')], 'B': [(19980228, 't1'), (19980302, 't2'), (19980303, 't3')]}
于 2012-04-20T07:46:37.013 に答える
2

これはそれを行う必要があります:

x, A, B = res[0]
output = {A:[], B:[]}
for a,b,c in res[1:]:
  output[A].append((a, b))
  output[B].append((a, c))
于 2012-04-20T07:42:26.127 に答える
0
>>> res = [[None,'A','B'],[19980228, 'd1', 't1'],[19980302, 'd2', 't2'],[19980303, 'd3', 't3']]
>>> d = dict((x[0],x[1:]) for x in zip(*res))
>>> nums = d.pop(None)
>>> for key in d:
        d[key] = zip(nums,d[key])


>>> d
{'A': [(19980228, 'd1'), (19980302, 'd2'), (19980303, 'd3')], 'B': [(19980228, 't1'), (19980302, 't2'), (19980303, 't3')]}
于 2012-04-20T11:15:28.593 に答える