2015-08-27 3 views
1

У меня есть список путей, как ['aaa/aaa.csv', 'aaa/bbb.csv', 'aaa/ccc.csv']. Как его можно преобразовать в словарь, например {'aaa':['aaa.csv', 'bbb.csv', 'ccc.csv'] и т. Д. С первой папкой в ​​пути, равно другим?сделать словарь из списка в python

Я пробовал этот код, но смутился, что делать дальше.

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 
+1

Просто слово предупреждения: с помощью того, как вы в настоящее время используете 'split', вы можете столкнуться с проблемами, если столкнулись с множеством вложенных каталогов, например. '/ aaa/bbb/ccc.csv' –

ответ

3
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']} 
+1

Может немного очистить ключ' for, val в [x.split ("/") для x в lst]: ' –

+0

Вау, спасибо. Работает для меня отлично. –

-1
path_dict = {} 

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

Что происходит, когда у вас есть 2 файла с одним и тем же путем? –

1
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:])) 
0

Вы можете попробовать это:

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

Вы можете также использовать 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']) 

Это также будет работать для вложенных каталогов, поместив полный путь в качестве ключа.

Смежные вопросы