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

Redis中实现Python风格嵌套字典结构失败,咨询原因及正确实现方式

Redis中实现Python风格嵌套字典结构失败,咨询原因及正确实现方式

嗨,我来帮你拆解下问题出在哪,以及怎么搞定你想要的嵌套结构存储~

为什么你的代码不工作?

主要是两个核心问题:

  1. Redis hset的用法错了
    你写的r.hset(f"{group}", json.dumps(mapping))不符合hset的参数规则:hset要么是hset(哈希键, 字段名, 字段值)的单字段设置,要么是传入一个{字段名: 字段值}的字典做批量设置。你现在只传了一个序列化后的JSON字符串,Redis会把它当成字段名,但没有对应的值,存储的结构完全不是你预期的样子。
  2. 存储结构不符合预期
    你想把1、2、3作为哈希表的独立字段,每个字段对应{key: item}这样的小字典,但原代码是把整个mapping打包成一个大字符串存成了一个(错误的)字段,后续用hmget取['1','2','3']自然拿不到数据。

正确的实现方式

因为Redis本身不支持哈希表的字段值直接是另一个哈希表,所以我们需要用JSON序列化把嵌套字典转成字符串存储,读取时再反序列化回来。

1. 正确存储数据

import json
import redis

# 先初始化你的Redis连接(根据实际情况配置参数)
r = redis.Redis(host='localhost', port=6379, db=0)

mapping = {}
for i, (key, item) in enumerate(sorted(total_activs.items()), start=1):
    # 把每个小字典序列化成JSON字符串,作为哈希表字段的值
    mapping[str(i)] = json.dumps({key: item})

# 用批量设置的方式,把mapping里的键值对作为哈希表的字段和值
r.hset(f"{group}", mapping=mapping)

2. 正确读取并使用数据

# 读取指定字段
top_raw = r.hmget(f"{group}", ['1', '2', '3'])
# 过滤不存在的字段(返回None的情况),并反序列化成Python字典
top_dicts = [json.loads(item) for item in top_raw if item is not None]

print(top_dicts)  # 输出: [{key_1: my_first_item}, {key_2: my_second_item}, ...]

# 访问第一个元素的内容(如果需要动态获取key的话)
first_key = next(iter(top_dicts[0].keys()))
print(top_dicts[0][first_key])  # 输出: my_first_item

这样就能实现你想要的:把类似{1: {key1: item1}, 2: {key2: item2}}的结构存在Redis哈希表中,后续可以读取指定字段并操作嵌套字典。

备注:内容来源于stack exchange,提问作者Yuniversia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.13 20:05:29