重生之我来写低代码后端04- Json和python字典

Json和python字典

github

python字典使用

常见操作

Python 3 中的字典(dictionary)是一种可变的、无序的、键值对(key-value pair)的集合

  1. 创建字典:
# 使用花括号 {} 创建空字典
empty_dict = {}

# 使用花括号 {} 创建带有键值对的字典
person = {"name": "John", "age": 30, "city": "New York"}
  1. 访问字典中的值:
# 使用键访问字典中的值
name = person["name"]
print(name)  # 输出:John
  1. 修改字典中的值:
# 使用键修改字典中的值
person["age"] = 31
print(person)  # 输出:{'name': 'John', 'age': 31, 'city': 'New York'}
  1. 添加新的键值对:
# 使用新的键添加键值对
person["job"] = "Developer"
print(person)  # 输出:{'name': 'John', 'age': 31, 'city': 'New York', 'job': 'Developer'}
  1. 删除字典中的键值对:
# 使用 del 语句删除字典中的键值对
del person["age"]
print(person)  # 输出:{'name': 'John', 'city': 'New York', 'job': 'Developer'}
  1. 检查字典中是否存在某个键:
# 使用 in 关键字检查字典中是否存在某个键
if "name" in person:
    print("Name key exists.")
  1. 遍历字典中的键值对:
# 使用 for 循环遍历字典中的键值对
for key, value in person.items():
    print(key, value)
  1. 获取字典中的所有键:
# 使用 keys() 方法获取字典中的所有键
keys = person.keys()
print(keys)  # 输出:dict_keys(['name', 'city', 'job'])
  1. 获取字典中的所有值:
# 使用 values() 方法获取字典中的所有值
values = person.values()
print(values)  # 输出:dict_values(['John', 'New York', 'Developer'])

这些是 Python 3 字典的基本操作。你可以根据需要使用字典来存储和操作数据。

深入了解

然而这里有些不习惯的地方在于通过字典拿取value会导致异常

访问字典中的值:

# 使用键访问字典中的值
name = person["name_not_exist"] # raise exception
print(name)  # 输出:John

# 应该使用
name = person.get("name_not_exist", "default_value")

json 序列化

正常的json使用这里就不谈了。
当我们想使用json序列化一个类时

class Test:
    def __init__(cls):
        cls.name = "123"

print(json.dumps(Test())) # raise TypeError: Object of type Test is not JSON serializable

即默认的Python类是无法进行Json序列化的。

class Test:
    def __init__(cls):
        cls.name = "123"
    def to_dict(cls):
        return {"name": cls.name}
    
print(json.dumps(Test().to_dict()))

因此我们需要生成一个字典方法来进行序列化。

但是对于每个类都要生成这样一个字典方法有点麻烦,好在python本身有魔术方法__dict__

print(json.dumps(Test().__dict__))

但是当我们进行嵌套处理的时候,就又会有问题

class Dog:
    def __init__(cls):
        cls.dog = "dog"
class Test:
    def __init__(cls):
        cls.name = "123"
        cls.dog = Dog()

print(json.dumps(Test().__dict__)) #raise Type Error

因此我们为了嵌套处理定义工具类

def toJSON(obj):
    return json.dumps(
        obj,
        default=lambda o: o.__dict__,
        sort_keys=True,
        indent=4)

print(toJSON(Test()))
"""
{
    "dog": {
        "dog": "dog"
    },
    "name": "123"
}

"""

详情见
github

/app/common/utils_test.py

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值