Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中从列表生成字典_Python_List_Dictionary - Fatal编程技术网

在python中从列表生成字典

在python中从列表生成字典,python,list,dictionary,Python,List,Dictionary,我有一个路径列表,比如['aaa/aaa.csv','aaa/bbb.csv','aaa/ccc.csv']。 当路径中的第一个文件夹与其他文件夹相同时,如何将其转换为字典,如{'aaa':['aaa.csv','bbb.csv','ccc.csv']等 我尝试了这段代码,但不知道下一步该怎么做 list_split = [i.split('/') for i in list] dic = {} list_temp = [] for item in list_split: list_t

我有一个路径列表,比如
['aaa/aaa.csv','aaa/bbb.csv','aaa/ccc.csv']
。 当路径中的第一个文件夹与其他文件夹相同时,如何将其转换为字典,如
{'aaa':['aaa.csv','bbb.csv','ccc.csv']

我尝试了这段代码,但不知道下一步该怎么做

list_split = [i.split('/') for i in list]

dic = {}
list_temp = []
for item in list_split:
    list_temp.append(item)
    if len(list_temp) < 2:
        pass
    else:
        for itemm in list_temp:
            pass
list_split=[i.split('/')表示列表中的i]
dic={}
列表_temp=[]
对于列表中的项目\u拆分:
列表临时附加(项目)
如果len(列表温度)<2:
通过
其他:
对于列表中的项目M\u temp:
通过
您可以尝试以下方法:

>>> L = ['aaa/aaa.csv', 'aaa/bbb.csv', 'aaa/ccc.csv']
>>> list_split = [tuple(i.split('/')) for i in L]
>>> newdict = {}
>>> for (key,item) in list_split:
    if key not in newdict:
        newdict[key]=[]
    newdict[key].append(item)
输出:

{'aaa': ['aaa.csv', 'bbb.csv', 'ccc.csv']}

您还可以为此使用
defaultdict

from collections import defaultdict

paths = ['aaa/aaa.csv', 'aaa/bbb.csv', 'aaa/ccc.csv', 'bbb/ccc.csv', 'aaa/bbb/ccc.csv']
dict = defaultdict(list)
for *key, value in [x.split('/') for x in paths]:
    dict['/'.join(key)].append(value)

print(dict.items())
print(dict['aaa'])

通过将完整路径作为键,这也适用于嵌套目录。

只是一个警告:按照您当前使用的
split
,如果遇到多个嵌套目录,您可能会遇到麻烦,例如
/aaa/bbb/ccc.csv
可以使用
作为键,val在[x.split(“/”)中为lst中的x清除一点:
当您有两个路径相同的文件时会发生什么?
>>> L = ['aaa/aaa.csv', 'aaa/bbb.csv', 'aaa/ccc.csv']
>>> list_split = [tuple(i.split('/')) for i in L]
>>> newdict = {}
>>> for (key,item) in list_split:
    if key not in newdict:
        newdict[key]=[]
    newdict[key].append(item)
{'aaa': ['aaa.csv', 'bbb.csv', 'ccc.csv']}
from collections import defaultdict

paths = ['aaa/aaa.csv', 'aaa/bbb.csv', 'aaa/ccc.csv', 'bbb/ccc.csv', 'aaa/bbb/ccc.csv']
dict = defaultdict(list)
for *key, value in [x.split('/') for x in paths]:
    dict['/'.join(key)].append(value)

print(dict.items())
print(dict['aaa'])