Python字典中值存在但检查返回False的问题及日期匹配需求
解决嵌套字典的存在性判断与索引取值问题
问题根源
你当前的字典结构是列作为外层Key,每个列对应一个内层字典(索引为Key,单元格值为Value),示例如下:
df = { 'Date': {0: '04-Nov-22', 1: '05-Nov-22'}, 'Open': {0: '0.9865', 1: '0.9870'}, 'Close': {0: '0.9872', 1: '0.9868'} }
执行'0.9872' in df.values()返回False,是因为df.values()返回的是所有列的内层字典(比如{'0': '04-Nov-22', ...}),而非具体的单元格值,自然找不到单个字符串。
解决日期存在性判断
要判断输入的日期是否存在,直接针对Date列的内层字典取值即可:
data_input = input("请输入日期(格式如04-Nov-22):") # 判断日期是否存在 is_exist = data_input in df['Date'].values() print(is_exist) # 存在则返回True
根据日期获取对应索引的其他值
方法1:基于现有嵌套字典结构
先找到日期对应的索引,再用索引去其他列的字典中取值:
data_input = input("请输入日期:") target_index = None # 遍历Date列的键值对,找到目标日期的索引 for idx, date_str in df['Date'].items(): if date_str == data_input: target_index = idx break if target_index is not None: # 根据索引获取其他列的值 print(f"日期 {data_input} 对应的Open值:{df['Open'][target_index]}") print(f"日期 {data_input} 对应的Close值:{df['Close'][target_index]}") else: print("输入的日期不存在")
方法2:转换为更易用的列表字典(推荐新手)
把嵌套字典转换为每行一条记录的列表字典,结构更直观,操作更简单:
# 转换结构 records = [] # 取所有索引(假设各列的索引一致) indexes = df['Date'].keys() for idx in indexes: # 拼接每一行的记录 record = { 'Date': df['Date'][idx], 'Open': df['Open'][idx], 'Close': df['Close'][idx] # 其他列同理添加 } records.append(record) # 现在records的结构是: # [{'Date': '04-Nov-22', 'Open': '0.9865', 'Close': '0.9872'}, ...] # 判断日期是否存在 data_input = input("请输入日期:") is_exist = any(record['Date'] == data_input for record in records) print(is_exist) # 获取对应值 for record in records: if record['Date'] == data_input: print(f"Open: {record['Open']}, Close: {record['Close']}") break
补充:判断其他值是否存在
比如要找'0.9872'是否存在,需要指定对应的列:
# 判断Close列中是否存在0.9872 print('0.9872' in df['Close'].values()) # 返回True
内容的提问来源于stack exchange,提问作者frenchie
相关产品推荐
相关产品推荐

