这是我最近关于在列表中搜索字典项的查询的补充问题:
Check if python dictionary contains value and if so return related value
我有一个包含以下格式的字典的数组:
fileList = [
{"fileName": "file1.txt", "fileMod": "0000048723"},
{"fileName": "file2.txt", "fileMod": "0000098573"}
]
我能够使用返回fileList中现有项的fileMod值列表 一个相当整洁的列表理解建议:
fileMod = [item['fileMod'] for item in fileList if item['fileName'] == filename]
如果存在匹配的文件名,则返回一个值,但我忘了包括我还需要知道文件列表中的任何条目都不匹配的文件名。
我确信这应该很简单,但我想我已经看了很长时间才能看到树林里的树林。
答案 0 :(得分:5)
也许你应该使用字典而不是列表?
files = {
'file1.txt': {'fileMod': '0000048723'},
'file2.txt': {'fileMod': '0000048723'}
}
这会存储与列表相同的信息,但查找元素很简单:
mod = None
if 'file1.txt' in files:
mod = files['file1.txt']['fileMod']
答案 1 :(得分:2)
“如果一个dictonaries列表不包含特定值,请检查python”
if not any(item for item in fileList if item['fileName'] == filename):
如果列表中没有字典符合条件,则返回true。
这可能比检查整个fileMod
更快,因为一旦找到匹配就会停止。
“如果存在匹配的文件名,则返回一个值,但我忘了包括我还需要知道文件名与文件列表中的任何条目都不匹配。” (一个不同的问题?)
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]
是一个负面创建列表。
答案 2 :(得分:2)
如果文件名与文件列表中的任何条目都不匹配,则列表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
答案 3 :(得分:0)
请注意
fileMod = [item['fileMod'] for item in fileList if item['fileName'] == filename]
返回列表的修改日期(不是值), 如果列表长度为零,则fileList中没有与文件名匹配的项目。