字典在Python 3.6中排序(至少在CPython实现下),与之前的版本不同.这似乎是一个重大变化,但它只是文档中的一小段.它被描述为CPython实现细节而不是语言特性,但也暗示这可能成为未来的标准.
在保留元素顺序的同时,新字典实现如何比旧字典实现更好?
以下是文档中的文字:
dict()现在使用PyPy开创的"紧凑"表示.与Python 3.5相比,新dict()的内存使用量减少了20%到25%.PEP 468(在函数中保留**kwargs的顺序.)由此实现.这个新实现的顺序保留方面被认为是一个实现细节,不应该依赖(这可能会在未来发生变化,但是在更改语言规范之前,希望在几种版本的语言中使用这个新的dict实现为所有当前和未来的Python实现强制命令保留语义;这也有助于保持与随机迭代顺序仍然有效的语言的旧版本的向后兼容性,例如Python 3.5).(由INADA Naoki在issue 27350中提供.最初由Raymond Hettinger提出的想法.)
2017年12月更新:Python 3.7 保证了dict保留插入顺序
我在Python中有一个字典,如下所示:
D = {1:'a', 5:'b', 2:'a', 7:'a'}
键的值大多不相关.有没有办法按数字顺序按键遍历字典?键都是整数.
而不是说
for key in D:
    # some code...
我可以按顺序查看字典键1, 2, 5, 7吗?
另外,我不能使用排序/排序功能.
我有一个python字典,我想根据名称排序:
location_map_india = {
  101: {'name': 'Andaman & Nicobar Islands', 'lat': 11.96, 'long': 92.69, 'radius': 294200},  
  108: {'name': 'Andhra Pradesh', 'lat': 17.04, 'long': 80.09, 'radius': 294200},
...
}
它并没有像我期望的那样出现.我试过了:
location_map_india = sorted(location_map_india.iteritems(), key=lambda x: x.name)
以上都行不通.我该怎么办?
更新
允许以下内容并按预期运行.谢谢你的帮助.码:
location_map_india = sorted(location_map_india.iteritems(), key=lambda x: x[1]["name"])
模板:
{% for key,value in location_map_india %}<option value="{{key}}" >{{value.name}}</option>{% endfor %}
可能重复:
在Python中,如何按排序顺序迭代字典?
我需要字典方面的帮助.我有两个词典,我想在这两个词典中添加相同键的值.我需要列出总和具有相同键的值的列表.我做了列表,但是在完成所有计算之后添加了他们的键是两个词典中唯一的那些值.我的意思是:
dectionary1= {8: 2, 0: 6, 2: 5, 3: 34}  
dectionary2= {8: 6, 1: 2, 3: 2}
我的清单必须是:
summing= [6, 2, 5, 36, 8]
因为它将取0并检查在行为2中是否有0,然后它将取得1(不是2)并检查是否在行动1中找到它以便订购列表.
我到目前为止得到了这个:
summing=[8, 6, 5, 36, 2]
这里最初需要键(8)而不是(0)!! 我希望它有条不紊.
看到我的代码,到目前为止我得到的:
dic1= {8: 2, 0: 6, 2: 5, 3: 34}  
dic2= {8: 6, 1: 2, 3: 2}
p=[]
for x in dic1:
    if x in dic2:
        g=dic1[x]+dic2[x]
        p=p+[g]
    else:
        p=p+[dic1[x]]
for m in dic2:
    if m in dic1:
        p=p
    else:
        p=p+[dic2[m]]
我想如果我可以让字典按顺序递增,那将会更容易,但是如何?
我的python是Wing IDE 3.2 …
我有一本字典:
a = {"w1": "wer", "w2": "qaz", "w3": "edc"}
当我尝试打印其值时,它们从右到左打印:
>>> for item in a.values():
    print item,
edc qaz wer
我希望它们从左到右打印:
wer qaz edc
我该怎么做?