2014-06-17 48 views
-2

我有一系列jpgs是網站的照片。對於一些網站我有不止一張照片。我有每個網站的唯一ID。每張照片都有一個名稱,如'IDPhoto1','IDPhoto2'等。我想將一個列表中的唯一ID和另一個文件中的完整路徑分開,然後從兩個列表中生成一個字典,其中唯一ID是文件名中包含相同ID的密鑰和完整路徑就是這些值。我可以生成列表,但我不確定如何創建詞典。如何從兩個列表中生成字典,具有多個值的鍵

我正在更新,以包括我迄今爲止的代碼,這並不多。我試過下面的人建議創建字典,但我沒有得到與正確的鍵相關的正確值,以及對於某些鍵應該有多個值的事實。我如何生成一個匹配具有相同ID的值和密鑰的字典?

更新:我想我越來越近我編輯了下面的代碼。現在,我得到了正確的價值觀相關聯的右方向鍵,但我有與每個鍵關聯的多個值:

import os, PyPDF2, re 
pgs_dir = r'P:\Records\GIS\Projects\D04_OHS\OverheadSignStructurePics' 
jpg_paths = [] 
jpg_ID = [] 
pattern = re.compile(r'Photo.*') 

for dirpath, dirnames, filenames in os.walk(jpgs_dir): 
    for filename in filenames: 
     fullPath = dirpath+'\\'+filename 
     if re.search(pattern,filename): 
      jpg_paths.append(fullPath) 
      file_ID = re.sub(pattern,'',filename) 
      jpg_ID.append(file_ID) 
      jpg_ID_unique = set(jpg_ID) 

for j in jpg_ID: 
for jp in jpg_paths: 
    if j in jp: 
     if j not in pdf_dict.keys(): 
      pdf_dict[j] = jp 
     else: 
      pdf_dict.update({j:jp}) 

print pdf_dict 

最後編輯:

爲了更好地關注這個問題,我已經編輯了原來的崗位更清楚地問一個問題。我也能夠產生一些代碼,爲我工作,所以下面貼:

import os, re 
jpgs_dir = r'D:\Records\GIS\Projects\D04_OHS\OverheadSignStructurePics\jpgs_reduced' 
jpg_paths = [] 
jpg_ID = [] 
pattern = re.compile(r'Photo.*') 
pdf_dict = {} 
pdf_file_path = r'D:\Records\GIS\Projects\D04_OHS\OverheadSignStructurePics\TIFS' 

convert_txt_file = r'D:\記錄\ GIS \項目\ D04_OHS \ OverheadSignStructurePics \ Convert_JPGS_Batch.txt」

for dirpath, dirnames, filenames in os.walk(jpgs_dir): 
    for filename in filenames: 
     fullPath = dirpath+'\\'+filename 
     if re.search(pattern,filename): 
      jpg_paths.append(fullPath) 
      file_ID = re.sub(pattern,'',filename) 
      jpg_ID.append(file_ID) 
      jpg_ID_unique = set(jpg_ID) 

print 'total number of unique IDs =',len(jpg_ID_unique) 

for j in jpg_ID_unique: 
    for jp in jpg_paths: 
     if j in jp: 
      pdf_dict.setdefault(j, []).append(jp) 
print pdf_dict 

另外這裏的例子所產生的詞典鍵和值中的一個的:

{ '35101023189S1':[ 'd:\記錄\ GIS \項目\ D04_OHS \ OverheadSignStructurePics \ jpgs_reduced \ 35101023189S1Photo1.jpg',「d :\記錄\ GIS \項目\ D04_OHS \ OverheadSignStructurePics \ jpgs_reduced \ 351010231 89S1Photo2.jpg」, 'd:\記錄\ GIS \項目\ D04_OHS \ OverheadSignStructurePics \ jpgs_reduced \ 35101023189S1Photo3.jpg', 'd:\記錄\ GIS \項目\ D04_OHS \ OverheadSignStructurePics \ jpgs_reduced \ 35101023189S1Photo4.jpg']

+0

你認爲字典可以創建嗎? – wwii

+0

這就是我卡住的地方。我可以比較列表元素以在一個列表中找到相應的文件路徑,其中包含另一個列表中包含的唯一ID,但是我不確定要從那裏執行什麼操作。 – kflaw

+0

您是否嘗試在創建文件路徑列表的同時創建字典? – wwii

回答

0
>>> list_of_unique_ids = ['IDPhoto1', 'IDPhoto2', 'IDPhoto3'] 
>>> list_of_corresponding_paths = [r'Path/To/Photo1', r'Path/To/Photo2', r'Path/To/Photo3'] 
>>> dictionary = dict(zip(list_of_unique_ids, list_of_corresponding_paths)) 
>>> print dictionary 
{'IDPhoto3': 'Path/To/Photo3', 'IDPhoto2': 'Path/To/Photo2', 'IDPhoto1': 'Path/To/Photo1'} 
+0

謝謝你的答案我會嘗試這個我不確定ID是否會與正確的文件路徑相關聯,因爲列表沒有排序..我很困惑與字典 – kflaw

+0

不幸的是它沒有工作,關鍵不是與正確的值相關聯,並且一些鍵應該有多個值 – kflaw

+0

列表需要按照相同的順序才能工作,即list_of_unique_ids的索引0處的元素應該對應於list_of_corresponding_paths的索引0處的元素否則您通過分解成兩個列表丟失了信息 – parth

相關問題