我有類型的字典,它包含以下格式的文件名和修改日期的列表:檢查Python字典包含值,如果這樣返回相關值
fileList = [{"fileName": "file1.txt", "fileMod": "0000048723"},
{"fileName": "file2.txt", "fileMod": "0000098573"}]
我需要查詢是否存在於一個fileName
字典,如果是這樣,則返回該條目的fileMod值。
我有類型的字典,它包含以下格式的文件名和修改日期的列表:檢查Python字典包含值,如果這樣返回相關值
fileList = [{"fileName": "file1.txt", "fileMod": "0000048723"},
{"fileName": "file2.txt", "fileMod": "0000098573"}]
我需要查詢是否存在於一個fileName
字典,如果是這樣,則返回該條目的fileMod值。
使用列表理解:
fileMod = [item['fileMod'] for item in fileList if item['fileName'] == filename]
您可以使用與filter。
>>> fileList = [{"fileName": "filename1.typ", "fileMod": "0000000001"}, {"fileName": "filename2.typ", "fileMod": "0000000002"}]
>>> filter(lambda x:x["fileName"]=="filename2.typ",fileList)[0]['fileMod']
'0000000002'
你也可以做到這一點使用List-Comprehension
[x['fileMod'] for x in fileList if x["fileName"]=="filename2.typ"][0]
,或只是一個簡單的迭代
for x in fileList:
if x["fileName"]=="filename2.typ":
print x["fileMod"]
只是爲了記錄:數據結構是字典的一個列表,而不是一本字典。所以你不能簡單地查詢項目"fileName"
的列表。你可以做這樣的:
for filedict in fileList:
if filedict.get("fileName") == "myrequestedfile.typ":
# to somthing
pass
好點,我需要更清楚。 – Finglish 2012-01-01 20:31:31
吧,你已經更新了你的問題,指示類型的字典列表,詹恩指出。但現在你的說法是不正確的:
我檢查是否存在文件名使用,如果文件名的文件列表:語句,它工作正常
裏卡多得到它的權利,你需要的字典modTimes或字典的字典。從您的fileList與輕鬆創建:
fileList = dict((f['fileName'],f) for f in fileList)
mod = fileList.get('file1.txt',<default>)
# or
fileList = dict((f['fileName'],f) for f in fileList)
mod = fileList.get('file1.txt',{}).get('fileMod',<default>)
可以解決很好地使用generator
和next
方法這個問題:
next(x['fileMod'] for x in fileList if x['fileName'] == 'my filename')
當然,如果發電機爲空(有這引發了StopIteration
錯誤在你的清單中沒有字典fileName == 'my filename'
)。您可以避免與以下提出的錯誤:
try:
next(x['fileMod'] for x in fileList if x['fileName']=='my filename')
except StopIteration:
print 'Oops! file not found'
該字典是進入另一個字典/列表/其他東西或什麼?文件模式如何與文件名相關聯?等......會很高興讓它更清晰:) – 2012-01-01 20:11:13
fileMod如何與fileName相關?你能舉出一個至少有兩個文件名和兩個文件模式的例子嗎? – gruszczy 2012-01-01 20:14:14
對不起,我意識到回頭說它不那麼清楚。我更新了這個問題,以更完整地顯示數據結構 – Finglish 2012-01-01 20:17:02