问题描述
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 }) => (
是