将 str 列表和列表转换为字典



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

例如,我目前的列表是:

['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]]}

谢谢。

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

有了这个,无论列表的顺序如何,它都会准确地选择您要查找的内容。

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]])
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)

你可以试试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)

似乎列表中的字符串值并不重要。根据所提供列表的当前结构和所需的输出,您可以只检查列表中的列表,通过使用 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时,您将它插入到字典中,将该列表的第一个值作为键,然后将列表追加为值。它应该为您提供所需的输出。