簡體   English   中英

從python中的列表制作字典

[英]make dictionary from list in python

我有類似['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
dic = {}
lst = ['aaa/aaa.csv', 'aaa/bbb.csv', 'aaa/ccc.csv']
for item in lst:
    slash = item.find('/')
    key = item[:slash]
    val = item[slash+1:]
    if dic.has_key(key):
        dic[key].append(val)
    else:
        dic[key] = [val]

>>> dic
{'aaa': ['aaa.csv', 'bbb.csv', 'ccc.csv']}
original_list = ['aaa/aaa.csv', 'aaa/bbb.csv', 'aaa/ccc.csv', 'x/1.csv', 'y/2.csv']  # i added a couple more items to (hopefully) prove it works

dic = {}

for item in original_list:
    path = item.split('/')
    if path[0] not in dic:
        dic[path[0]] = []
    dic[path[0]].append('/'.join(path[1:]))

您可以嘗試以下方法:

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

通過將完整路徑作為鍵,這也適用於嵌套目錄。

path_dict = {}

for path in path_list:
    if '/' in path:
        path_dict[path.split('/')[0]] = path.split('/')[1:]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM