如果字典列表不包含特定值,则检查python



这是我最近关于在列表中搜索字典项的问题的一些补充问题:

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

我有一个包含字典的数组,格式为:

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

我能够返回fileList中现有项的fileMod值列表一个相当简洁的列表推导式:

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

如果有匹配的文件名,则返回一个值,但我忘记包括我还需要知道何时有一个文件名与filelist中的任何条目不匹配。

我相信这应该很简单,但我想我只是看得太久了,只见树木不见森林。

也许你应该使用字典而不是列表?

files = {
    'file1.txt': {'fileMod': '0000048723'},
    'file2.txt': {'fileMod': '0000048723'}
}

存储与列表相同的信息,但是查找元素很容易:

mod = None
if 'file1.txt' in files:
    mod = files['file1.txt']['fileMod']

"如果字典列表不包含特定值,则检查python "

if not any(item for item in fileList if item['fileName'] == filename):
如果列表中没有字典满足条件,

返回true。

这可能比检查整个fileMod更快,因为它一旦找到匹配就会停止。


"如果有匹配的文件名,则返回一个值,但我忘了包括,我还需要知道何时有一个文件名与filelist中的任何条目不匹配。"(另一个问题?)

fileMod = []
fileBad = []
for item in fileList:
    if item['fileName'] == filename:
        fileMod.append(item['fileMod'])
    else:
        fileBad.append(item['fileMod'])

fileMod = {True: [], False: []} # a dictionary of lists
for item in fileList:
    fileMod[item['fileMod'] == filename].append(item['fileMod'])

最后一段代码返回一个列表字典:fileMod[True]是一个阳性发现列表,fileMod[False]是一个阴性发现列表。

如果文件名与文件列表中的任何条目不匹配,则列表fileMod将为空。

>>> if fileMod:
...     # Code when the filename matches at least one file
... else:
...     # Code when the filename doesn't match any entry.

检查python中的空列表:

>>> l = []
>>> if l:
...     print "not empty"
... else:
...     print "empty"
... 
empty

请注意

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

返回一个列表的修改日期(不是一个值),如果列表长度为零,则fileList中没有与文件名匹配的项。

最新更新