检查python字典是否包含值,如果是,则返回相关值

时间:2012-01-01 20:02:42

标签: python dictionary

我有一个dicts列表,其中包含以下格式的文件名和修改日期:

fileList = [{"fileName": "file1.txt", "fileMod": "0000048723"}, 
            {"fileName": "file2.txt", "fileMod": "0000098573"}]

我需要查询字典中是否存在fileName,如果是,则返回该条目的fileMod值。

5 个答案:

答案 0 :(得分:6)

使用列表理解:

fileMod = [item['fileMod'] for item in fileList if item['fileName'] == filename]

答案 1 :(得分:3)

您可以将lambdafilter一起使用。

>>> 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)

您可以使用generatornext方法很好地解决此问题:

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'