2017-06-21 96 views
-1

在Python中,如何将包含字符串和列表的列表中包含两个值的列表转换为字典,以便关键字是字符串,并且值是列表的列表每个列表的第一个值是关键。将str和列表的列表转换为字典

例如,目前的名单上有是:

['A', ['A', 1], 'B', ['B',1], ['B',2], 'C', ['C', 1], ['C',2], ['C',3]] 

,我想词典:

{'A': [['A', 1]], 'B': [['B',1], ['B',2]], 'C': [['C',1], ['C',2], [ 'C',3]}

谢谢。

编辑:字符串后面的列表数量是任意的。

+0

你试过做什么? – depperm

+0

我试图创建一个只有键和初始值为0的字典,但我想不出有效的方式来填充字典到我想要的。 –

+0

请分享代码,以便我们帮助您更好 – gmuraleekrishna

回答

2

这样,无论列表的顺序如何,它都会精确选择您要查找的内容。

def new(list_): 
    new_dic = {x:[y for y in list_ if type(y) == list and y[0] == x] for x in list_ if type(x) == str} 
    print(new_dic) 

new(['A', ['A', 1], ['A',2], 'B', ['B',1], ['B',2], 'C', ['C', 1], ['C',2]]) 
0
d = {l: [] for l in mylist if type(l) is str} 

for l in mylist: 
    if type(l) is list: 
     d[l[0]].append(l) 
+0

这些值为空列表,因为您没有评估列表的第一个值是否与密钥匹配。 –

+0

实际上,如果列表的第一个值与字典中的键不匹配,您将得到'KeyError' ......如果不知道是否所有列表都将被添加,则可以捕获此异常。 –

0

您可以尝试defaultdict

from collections import defaultdict 
my_dict = defaultdict(list) 
my_list = ['A', ['A', 1], ['A',2], 'B', ['B',1], ['B',2], 'C', ['C', 1], ['C',2]] 
for index in my_list: 
    if len(index) > 1: 
     my_dict[index[0]].append(index) 
0

现在看来似乎并不重要的字符串值是在列表中。根据该列表的当前结构所提供,以及所需的输出,你可以检查该列表名单内,并通过使用defaultdict结构,你可以简单地只是手艺你的字典相应:

from collections import defaultdict 

l = ['A', ['A', 1], 'B', ['B',1], ['B',2], 'C', ['C', 1], ['C',2], ['C',3]] 

d = defaultdict(list) 
for data in l: 
    if type(data) is list: 
     d[data[0]].append(data) 

输出:

defaultdict(<class 'list'>, {'A': [['A', 1]], 'C': [['C', 1], ['C', 2], ['C', 3]], 'B': [['B', 1], ['B', 2]]}) 

所以,在这里,该defaultdict将列表作为其默认的收藏价值。因此,添加新密钥时,默认值将成为一个列表。在迭代列表时,只需检查列表中的数据类型即可。当找到list时,将其插入字典中,将该列表的第一个值作为键,然后将该列表附加为值。它应该给你你正在寻找的输出。

+0

我得到TypeError:第一个参数必须是可调用的或无 –

+0

@ Mat.S我复制粘贴在我的答案代码,它运行良好。你提供什么输入? – idjaw

+0

@ Mat.S注意,defaultdict(list)中的列表是标准类型'list',而不是已经初始化的列表。 – rodgdor