python - 条件列表元素值
问题描述
我想制作一个字典来比较两个值,看看它们是否相等。由于我收到语法错误,您将如何执行此操作(请参阅 compareDict -list 的第三个元素的值)。有没有更优雅的方法来做到这一点?
def script_sanityCheck(shotDict):
#retrieve data from current script
script_frange = (nuke.root()['first_frame'].value(), nuke.root()['last_frame'].value())
script_fps = nuke.root()['fps'].value()
script_projectname = nuke.root()['project'].value()
script_code = nuke.root()['shotcode'].value()
script_neutralgrade = nuke.root()['neutralgrade_cdl'].value()
#extract data from dictionary
sg_frange = (shotDict['sg_cut_in'], shotDict['sg_cut_out'])
sg_fps = shotDict['sg_fps']
sg_projectname = shotDict['project.Project.name']
sg_code = shotDict['code']
sg_neutralgrade = shotDict['sg_neutralgrade_cdl']
#compare both
compareDict = {
'frange' : [script_frange, sg_frange, True if script_frange == sg_frange else False]
'fps' : [script_fps, sg_fps, True if script_fps == sg_fps else False]
'projectname' : [script_projectname, sg_projectname, True if script_projectname == sg_projectname else False ]
'code' : [script_code, sg_code, True if script_code == sg_code else False]
'neutralgrade' : [script_neutralgrade, sg_neutralgrade, True if script_neutralgrade == sg_neutralgrade else False]
}
pprint(script_sanityCheck(shotDict))
解决方案
从一开始就使用 dicts 来组织您的数据。这将允许您与 dict 理解进行比较:
def script_sanityCheck(shotDict):
#retrieve data from current script
script = {'frange': (nuke.root()['first_frame'].value(), nuke.root()['last_frame'].value()),
'fps': nuke.root()['fps'].value(),
'projectname': = nuke.root()['project'].value(),
'code': nuke.root()['shotcode'].value(),
'neutralgrade': nuke.root()['neutralgrade_cdl'].value()}
#extract data from dictionary
sg = {'frange': (shotDict['sg_cut_in'], shotDict['sg_cut_out']),
'fps': shotDict['sg_fps'],
'projectname': shotDict['project.Project.name'],
'code': shotDict['code'],
'neutralgrade': shotDict['sg_neutralgrade_cdl']}
#compare both
compareDict = {key: [script[key], sg[key], script[key] == sg[key]] for key in sg}
return compareDict
pprint(script_sanityCheck(shotDict))
另请注意,这True if a == b else False
很简单a == b
。
推荐阅读
- session - 在一天结束时停止画线
- c - 在C中放置负值后如何停止程序
- ios - 检测到二维码,但在 iphone 中未找到可用数据
- java - 无法配置数据源:未指定“url”属性,并且无法配置嵌入式数据源。添加了依赖,url信息
- folium - Folium 的指数或对数 ColorMap
- google-app-engine - '未找到服务“%s”的 api 代理' % service AssertionError: 未找到服务“datastore_v3”的 api 代理
- laravel - 在 Laravel Backpack 中使用 Google 登录
- javascript - 不断收到 DiscordAPIError:在 Discord.js 中的音乐机器人上使用 reconlx 的分页执行队列命令时出现未知交互
- sql - DAYNAME() 函数 SQL
- laravel - 如何使用 livewire 发送 nexmo SMS?