签蟒如果dictonaries清单不包含特定值
问题描述:
这是一些什么列表中的搜索字典项的补充问题我最近查询:签蟒如果dictonaries清单不包含特定值
Check if python dictionary contains value and if so return related value
我有一个包含一个数组在格式字典:
fileList = [
{"fileName": "file1.txt", "fileMod": "0000048723"},
{"fileName": "file2.txt", "fileMod": "0000098573"}
]
我才得以回到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']
答
“签入蟒如果dictonaries的列表不包含特定值”
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]
为负创立的列表。
答
如果文件名与文件列表中的任何条目不匹配,则列表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中没有与文件名相匹配的项目。
你想为一个特定的文件名或为所有这些做到这一点? – Kos 2012-01-02 10:26:36
只需检查'fileMod'列表是否为空? – kennytm 2012-01-02 10:26:56
我用@ PaulHankin对这个问题的回答给出了同样的建议,对你之前的问题发表了评论。除非有重复的文件名,否则您应该使用文件名作为关键字的字典,而不是字典列表。在这种情况下,你可以'文件名'在文件中**,但als **文件名不在文件中,这样可以解决你的两个问题 – 2012-01-02 10:49:07