Два списка: один словарь - вставка элементов из одного списка (значений) в ключи в словаре - PullRequest
0 голосов
/ 07 ноября 2019

( Примечание: здесь используется ESRI arcpy. Описание )

У меня есть пустой словарь, скажем, он называется file_dict .

У меня естьдва списка: 1. Один из них - список элементов типов файлов, которые я буду использовать в качестве ключей, с именем typeList . 2. Второй - это список файлов в папке с именем fileList .

. Я могу: * Получить typeList в словарь в качестве ключей.

file_dict.keys()
[u'Layer', u'DbaseTable', u'ShapeFile', u'File', u'TextFile', u'RasterDataset']

Мне нужна помощь: Использование сравнений, которые проверяют следующее: (псевдокодировано)

FOR each file in fileList:
    CHECK the file type 
''' using arcpy.Describe -- I have a variable already called desc - it is how I got typeList '''
    IF file is a particular type (say shapefile):
        INSERT that value from fileList into a list within the appropriate typeList KEY in file_dict
    ENDIF
ENDFOR

Мой желаемый вывод для file_dict будет:

    >>> file_dict
    {
u'Layer': ['abd.lyr', '123.lyr'], u'DbaseTable': ['ABD.dbf'], 
u'ShapeFile': ['abc.shp', '123.shp'], u'File': ['123.xml'], 
u'TextFile': ['ABC.txt', '123.txt'], 
u'RasterDataset': ['ABC.jpg', '123.TIF']
}

Примечание: Iхотел бы избежать молнии. (Я понимаю, это проще, но ...)

1 Ответ

0 голосов
/ 07 ноября 2019

Если вы хотите сделать это с помощью простого скрипта Python, тогда это поможет

# Input
file_list = ['abd.lyr', '123.lyr', 'ABD.dbf', 'abc.shp', '123.shp', '123.xml', 
            'ABC.jpg', '123.TIF', 'ABC.txt',  '123.txt'
            ]

# Main code
file_dict = {} #dict declaration


case = {
    'lyr': "Layer",
    'dbf': "DbaseTable",
    'shp': "ShapeFile",
    'xml': "File",
    'txt': "TextFile",
    'jpg': "RasterDataset",
    'TIF': "RasterDataset",
} # Case declaration for easy assignment


for i in file_list:
    file_dict.setdefault(case[i.split(".")[-1]], []).append(i) # appending files to the case identified using setdefault method.

print (file_dict)

# Output
# {'Layer': ['abd.lyr', '123.lyr'], 'DbaseTable': ['ABD.dbf'], 'ShapeFile': ['abc.shp', '123.shp'], 'File': ['123.xml'], 'RasterDataset': ['ABC.jpg', '123.TIF'], 'TextFile': ['ABC.txt', '123.txt']}

Надеюсь, это поможет и рассчитывает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...