我有一个dicts列表,其中包含以下格式的文件名和修改日期:
fileList = [{"fileName": "file1.txt", "fileMod": "0000048723"},
{"fileName": "file2.txt", "fileMod": "0000098573"}]
我需要查询字典中是否存在fileName
,如果是,则返回该条目的fileMod值。
答案 0 :(得分:6)
使用列表理解:
fileMod = [item['fileMod'] for item in fileList if item['fileName'] == filename]
答案 1 :(得分:3)
>>> 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"]
答案 2 :(得分:3)
仅供记录:您的数据结构是字典列表,而不是字典。因此,您无法简单地查询项"fileName"
的列表。你可以这样做:
for filedict in fileList:
if filedict.get("fileName") == "myrequestedfile.typ":
# to somthing
pass
答案 3 :(得分:2)
是的,你已经更新了你的问题,以表明Janne指出的一系列词汇。但是现在你的陈述并非如此:
我正在检查fileName是否存在使用filelist:statement中的文件名,这是正常工作
里卡多做对了,你需要一个modTimes的词典或一个dicts的词典。使用以下命令从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>)
答案 4 :(得分:2)
您可以使用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'