将列表列表转换为词典字典

时间:2016-12-07 23:46:05

标签: python list dictionary type-conversion

我有一个Python列表,其中包含键/值

{'001': {'A':'100','B':'94'}, '002': {'A':'87','B':'85'} }

但前两列是唯一的密钥。我想将列表转换为字典,其中每个键的多个值将聚合到字典字典中以便于查找值

ID, First Name

这种优雅的Python方式是什么?感谢。

3 个答案:

答案 0 :(得分:2)

您可以使用collections.defaultdict()

In [54]: lst = [ ['001', 'A', '100'], ['001', 'B', '94'], ['002', 'A', '87'], ['002', 'B', '85'] ]

In [55]: from collections import defaultdict

In [56]: d = defaultdict(dict)

In [57]: for i, j, k in lst:
   ....:     d[i].update({j:k})
   ....:     

In [58]: d
Out[58]: defaultdict(<class 'dict'>, {'001': {'A': '100', 'B': '94'}, '002': {'A': '87', 'B': '85'}})

答案 1 :(得分:2)

可能最好的方法是使用dict作为工厂的defaultdict:

from collections import defaultdict

dictofdicts = defaultdict(dict)

start = [ ['001', 'A', '100'], ['001', 'B', '94'], ['002', 'A', '87'], ['002', 'B', '85'] ]

for outerkey, innerkey, value in start:
    dictofdicts[outerkey][innerkey] = value

这为您提供了所需的解决方案:

>>> dictofdicts
defaultdict(dict,
            {'001': {'A': '100', 'B': '94'}, '002': {'A': '87', 'B': '85'}})

defaultdict可以像普通字典一样使用,但您也可以将其转换为普通字典:

>>> dict(dictofdicts)
{'001': {'A': '100', 'B': '94'}, '002': {'A': '87', 'B': '85'}}

答案 2 :(得分:0)

在词典理解中:

>>> l = [ ['001', 'A', '100'], ['001', 'B', '94'], ['002', 'A', '87'], ['002', 'B', '85'] ]
>>> {l[i][0]:{k:v for (k, v) in zip(l[i][1:], l[i+1][1:])} for i in range(0, len(l), 2)}
{'002': {'A': 'B', '87': '85'}, '001': {'100': '94', 'A': 'B'}}