如何在Python中将列表列表转换为dict的dict

时间:2015-12-09 18:43:21

标签: python list dictionary data-structures

我不太确定如何用文字解释它,我想要做的就是转换它:

my_list = [['a','b',1],['a','c',2],['b','a',3],['b','c',4]]

这样的事情:

my_dict = {'a':{'b':1,'c':2},'b':{'a':3,'c':4}}

我试过

for item in my_list:
   my_dict[item[0]]= {item[1]:item[2]}

但它没有给出我想要的结果。

4 个答案:

答案 0 :(得分:2)

当密钥已经在dict中时,您需要使用.update而不是用新值替换该值。

>>> my_list = [['a', 'b', 1], ['a', 'c', 2], ['b', 'a', 3], ['b', 'c', 4]]
>>> my_dict = {}
>>> for item in my_list:
...     try:
...         my_dict[item[0]].update({item[1]: item[2]})
...     except KeyError:
...         my_dict[item[0]] = {item[1]: item[2]}
... 
>>> my_dict
{'b': {'c': 4, 'a': 3}, 'a': {'b': 1, 'c': 2}}

答案 1 :(得分:1)

通常,您应该从collections.defaultdict开始,为任何缺少的元素返回一个空字典。

然后,您可以遍历外部列表,获取子列表的第一个列表元素的条目,并将第二个元素的该字典条目的值设置为第3个元素的值。

答案 2 :(得分:1)

您提出的解决方案的问题是,每次在外部字典中遇到相同的密钥时,您都会覆盖内部字典。而不是使用

my_dict[item[0]]={item[1]:item[2]}

你需要使用.setdefault方法,这样如果它不存在就会创建dict,如果存在则会得到它。然后,您可以使用新的键值对更新它。

my_dict.setdefault(item[0], {})[item[1]] = item[2]

答案 3 :(得分:0)

my_list = [['a','b',1],['a','c',2],['b','a',3],['b','c',4]]

my_dict = {}
for item in my_list:
    if item[0] not in my_dict:
        my_dict[item[0]]= {item[1]:item[2]}
    else:
        my_dict[item[0]][item[1]] = item[2]


print(my_dict)

输出:

{'b': {'c': 4, 'a': 3}, 'a': {'b': 1, 'c': 2}}