python字典的key可以重复吗?

yangDL
  • 17

开发环境: centOS python2.7 Django框架

今天调试web网站时,前端以ajax的post发出请求, 后端以json格式返回字典

    applist = {'0':[], '1':[], '2':[], '3':[], '4':[], '5':[]}

    读取用户应用列表,切割成数组赋值给字典applist,以json返回给前端
    for appitem in myapplist:
        tmplist = []
        if appitem.allapp != '': 
            tmplist = appitem.allapp.split('_')

        applist[appitem.position] = tmplist

    return JsonResponse({'ret':0,'content':applist})

前端收到的结果:
{"content": {"3": ["1"], "1": [], "0": [], "3": [], "2": [], "5": [], "4": []}, "ret": 0}

居然有两个key是"3"~ 虽然我刚学python,但也不能欺负我啊~
求各位科普

回复
阅读 33.3k
4 个回答
xelz
  • 11.8k
✓ 已被采纳

字符串"3"和数字3 是不同的key哦,序列化成标准json格式字符串之后所有的key都会转化为str

>>> from json import dumps
>>> dumps({1: 1, "1": 1})
'{"1": 1, "1": 1}'
ajianrelease
  • 199

这个地方是蛮容易出问题的。Python中,键是unique的,但键可以有不同的类型,如xelz给出的,一个是字符串类型,一个是整型。而在json数据格式定义中,规定了键必须是字符串类型,但并没有规定键是unique的,所以在不同的json库中,可能有些要求unique,有些不要求unique。不过最好还是不要出现这种情况。在Python的json标准库中,当把Python字典转为json字符串时,允许有重复的键,而将json字符串转为Python字典时,如果字符串中有重复的键,那只保留最后一个键值对。个人建议,如果要将Python字典转为json,那最好字典的键都用字符串类型,这样就没有下面的问题了。

>>> import json
>>> a = {1: 20, "1": 40}
>>> b = json.dumps(a)
>>> b
'{"1": 40, "1": 20}'
>>> c = json.loads(b)
>>> c
{u'1': 20}
>>> 

字典中,键值对的键是唯一的哦

57bf0a
  • 3
新手上路,请多包涵

上面的都是答非所问
见核心编程第二版Page-175
7.5.1 不允许一个键对应多个值
当有键发生冲突,取最后的赋值.
就是说不报错,但实际存储的dict内容是去掉冲突后的结果

宣传栏