将n个等长的列表转换为一个字典,使用来自其中一列表的唯一键值。

2024-04-26 22:38:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我有n个长度相等的列表,表示数据库行的值。数据相当复杂,因此我将在示例中提供简化的值。你知道吗

本质上,我想将这些列表(a,b,c)的值映射到一个字典,其中键是列表(id)的集合。你知道吗

示例列表:

id = [1,1,1,2,2,2,3,3,3]
a = [1,2,3,4,5,6,7,8,9]
b = [10,11,12,13,14,15,16,17,18]
c = [20,21,22,23,24,25,26,27,28]

需要的字典输出:

{id:[[a],[b],[c]],...}

{'1':[[1,2,3],[10,11,12],[20,21,22]],'2':[[4,5,6],[13,14,15],[23,24,25]],'3':[[7,8,9],[16,17,18],[26,27,28]]}

字典现在有一个原始a、b、c中的值列表,由id列表中的唯一值子集,id列表现在是字典键。你知道吗

我希望这足够清楚。你知道吗


Tags: 数据id数据库示例列表字典子集本质
2条回答
IDs = [1,1,1,2,2,2,3,3,3]
a = [1,2,3,4,5,6,7,8,9]
b = [10,11,12,13,14,15,16,17,18]
c = [20,21,22,23,24,25,26,27,28]

import itertools
d = {}
for key, group in itertools.groupby(sorted(zip(IDs, a, b, c)), key=lambda x:x[0]):
    d[key] = map(list, zip(*group)[1:])  # [1:] to get rid of the ID

print d

输出:

{1: [[1, 2, 3], [10, 11, 12], [20, 21, 22]], 
 2: [[4, 5, 6], [13, 14, 15], [23, 24, 25]], 
 3: [[7, 8, 9], [16, 17, 18], [26, 27, 28]]}

试试这个:

id = ['1','1','1','2','2','2','3','3','3']
a  = [1,2,3,4,5,6,7,8,9]
b  = [10,11,12,13,14,15,16,17,18]
c  = [20,21,22,23,24,25,26,27,28]

from collections import defaultdict
d = defaultdict(list)

# add as many lists as needed, here n == 3
lsts = [a, b, c]

for ki, kl in zip(id, zip(*lsts)):
    d[ki] += [kl]

for k, v in d.items():
    # if you don't mind using tuples, simply do this: d[k] = zip(*v)
    d[k] = map(list, zip(*v))

根据问题,结果与预期完全一致:

d == {'1':[[1,2,3],[10,11,12],[20,21,22]],
      '2':[[4,5,6],[13,14,15],[23,24,25]],
      '3':[[7,8,9],[16,17,18],[26,27,28]]}
=> True

相关问题 更多 >