相关疑难解决方法(0)

是否在Python 3.6+中订购了字典?

字典在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 dictionary python-3.x python-internals python-3.6

386
推荐指数
5
解决办法
8万
查看次数

按排序顺序迭代按键的Python字典

我在Python中有一个字典,如下所示:

D = {1:'a', 5:'b', 2:'a', 7:'a'}
Run Code Online (Sandbox Code Playgroud)

键的值大多不相关.有没有办法按数字顺序按键遍历字典?键都是整数.

而不是说

for key in D:
    # some code...
Run Code Online (Sandbox Code Playgroud)

我可以按顺序查看字典键1, 2, 5, 7吗?

另外,我不能使用排序/排序功能.

python sorting dictionary loops

32
推荐指数
3
解决办法
4万
查看次数

按名称排序python字典?

我有一个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},
...
}
Run Code Online (Sandbox Code Playgroud)

它并没有像我期望的那样出现.我试过了:

location_map_india = sorted(location_map_india.iteritems(), key=lambda x: x.name)
Run Code Online (Sandbox Code Playgroud)

以上都行不通.我该怎么办?

更新

允许以下内容并按预期运行.谢谢你的帮助.码:

location_map_india = sorted(location_map_india.iteritems(), key=lambda x: x[1]["name"])
Run Code Online (Sandbox Code Playgroud)

模板:

{% for key,value in location_map_india %}<option value="{{key}}" >{{value.name}}</option>{% endfor %}
Run Code Online (Sandbox Code Playgroud)

python sorting dictionary

2
推荐指数
1
解决办法
253
查看次数

如何在python中订购我的字典?

可能重复:
在Python中,如何按排序顺序迭代字典?

我需要字典方面的帮助.我有两个词典,我想在这两个词典中添加相同键的值.我需要列出总和具有相同键的值的列表.我做了列表,但是在完成所有计算之后添加了他们的键是两个词典中唯一的那些值.我的意思是:

dectionary1= {8: 2, 0: 6, 2: 5, 3: 34}  
dectionary2= {8: 6, 1: 2, 3: 2}
Run Code Online (Sandbox Code Playgroud)

我的清单必须是:

summing= [6, 2, 5, 36, 8]
Run Code Online (Sandbox Code Playgroud)

因为它将取0并检查在行为2中是否有0,然后它将取得1(不是2)并检查是否在行动1中找到它以便订购列表.

我到目前为止得到了这个:

summing=[8, 6, 5, 36, 2]
Run Code Online (Sandbox Code Playgroud)

这里最初需要键(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]]
Run Code Online (Sandbox Code Playgroud)

我想如果我可以让字典按顺序递增,那将会更容易,但是如何?

我的python是Wing IDE 3.2 …

python

1
推荐指数
1
解决办法
307
查看次数

如何从左到右打印字典值?

我有一本字典:

a = {"w1": "wer", "w2": "qaz", "w3": "edc"}
Run Code Online (Sandbox Code Playgroud)

当我尝试打印其值时,它们从右到左打印:

>>> for item in a.values():
    print item,


edc qaz wer
Run Code Online (Sandbox Code Playgroud)

我希望它们从左到右打印:

wer qaz edc
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

python printing dictionary

0
推荐指数
1
解决办法
694
查看次数