Python 为什么整数字典键作为字符串从会话中检索?

Python 为什么整数字典键作为字符串从会话中检索?,python,django,Python,Django,在下面的代码中,为什么在session\u retrieve视图中将people字典的1键作为字符串检索?如何保持原始(整数)类型 另外,为什么45值不会发生相同的情况 def session_add(request): people = { 1: { 'name': 'Tom', 'age': 45, } } request.session['people'] = people

在下面的代码中,为什么在
session\u retrieve
视图中将
people
字典的
1
键作为字符串检索?如何保持原始(整数)类型

另外,为什么
45
值不会发生相同的情况

def session_add(request):
    people = {
        1: {
            'name': 'Tom',
            'age': 45,
        }   
    }
    request.session['people'] = people
    print(request.session['people'])
    # prints {1: {'name': 'Tom', 'age': 45}}
    return HttpResponse('added')

def session_retrieve(request):
    print(request.session['people'])
    # prints {'1': {'name': 'Tom', 'age': 45}}
    return HttpResponse('retrieved')

这是为了JSON兼容性。因为键本质上是JavaScript对象的属性,所以它们是字符串。字段可以是任何基本体或其他对象,因此45仍然是一个数字


文档中已经提到了这种行为。以美国为例,

另外,为什么
45
值不会发生相同的情况

def session_add(request):
    people = {
        1: {
            'name': 'Tom',
            'age': 45,
        }   
    }
    request.session['people'] = people
    print(request.session['people'])
    # prints {1: {'name': 'Tom', 'age': 45}}
    return HttpResponse('added')

def session_retrieve(request):
    print(request.session['people'])
    # prints {'1': {'name': 'Tom', 'age': 45}}
    return HttpResponse('retrieved')
JSON只支持字符串键,但值可以是任何值