我不太确定如何用文字解释它,我想要做的就是转换它:
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]}
但它没有给出我想要的结果。
答案 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}}