如何解决如何检查列表中的字典中是否存在值的特定组合?
kNownShows = [
{'Parsed Name': 'A','Parsed Season':'1','Override?': 'N','NewName': '','NewSeason': ''},{'Parsed Name': 'B',{'Parsed Name': 'C','Parsed Season':'2',{'Parsed Name': 'D','NewSeason': ''}
]
并且我正在使用python脚本根据剧集名称(例如,“ A-s01e02”变为已解析名称“ A”,而已解析季节“ 1”)自动添加新字典(具有已解析季节编号的显示名称)。
有什么方法可以检查列表中的字典中是否已经存在键/值对的特定组合?
我正尝试使用this solution的修改版本,将其转换为
if not (any(d['Parsed Name'] == showName for d in kNownShows) and any(d['Parsed Season'] == str(season) for d in kNownShows)):
但是当解析列表中的同一节目有多个季节时,这已经开始引起问题。
例如,我有一集具有以下节目/季节组合的剧集:
'Parsed Name' = "A"
'Parsed Season' = "2"
由于两者都存在:列表中已经存在一个名为“ A”的节目和一个季节“ 2”,因此不会为A的第2季创建新条目。
是否有任何方法可以更改if语句以检查Show A和Season 2的组合,并且仅当该特定组合存在于列表中的同一词典中时才将其设置为False?
解决方法
您可以通过以下方式在列表理解内使用AND:
if not any((d['Parsed Name'] == showName and d['Parsed Season'] == str(season)) for d in knownShows):
,
您可以使用列表推导将名称和季节合并到单个字段中并进行检查。
knownShows = [
{'Parsed Name': 'A','Parsed Season':'1','Override?': 'N','NewName': '','NewSeason': ''},{'Parsed Name': 'B',{'Parsed Name': 'C','Parsed Season':'2',{'Parsed Name': 'D','NewSeason': ''}
]
def entryexists(name,season):
s = [d['Parsed Name']+'|'+d['Parsed Season'] for d in knownShows]
if name+'|'+season in s:
return True
return False
print(entryexists('A','1'))
print(entryexists('D','2'))
输出
True
False
,
如果您可以控制数据结构,则可以考虑将数据存储在字典中而不是列表中:
new_key = ("A","1")
new_key in keyed_known_shows
这样,您就可以直接对所需条目进行哈希处理,而不必遍历数据。
const Item = ({ item,onPress }) => (
是
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。