You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 12:40:32