相关疑难解决方法(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中打印深度为~4的字典呢?我尝试使用漂亮的打印pprint(),但它不起作用:

import pprint 
pp = pprint.PrettyPrinter(indent=4)
pp.pprint(mydict)
Run Code Online (Sandbox Code Playgroud)

我只想"\t"为每个嵌套设置一个缩进(),这样我得到这样的东西:

key1
    value1
    value2
    key2
       value1
       value2
Run Code Online (Sandbox Code Playgroud)

等等

我怎样才能做到这一点?

python dictionary

244
推荐指数
13
解决办法
20万
查看次数

"setdefault"dict方法的用例

加入collections.defaultdict在Python 2.5大大降低用于需要dictsetdefault方法.这个问题适合我们的集体教育:

  1. setdefault今天在Python 2.6/2.7中还有什么用处?
  2. 哪些流行的用例setdefault被取代了collections.defaultdict

python dictionary setdefault

181
推荐指数
7
解决办法
9万
查看次数

我可以在Python中执行有序的默认dict吗?

我想结合OrderedDict(),并defaultdict()collections一个对象,这应是一个有序的,默认的字典.这可能吗?

python dictionary

174
推荐指数
7
解决办法
4万
查看次数

如何从字典中按照插入的顺序检索项目?

是否可以按照插入的顺序从Python字典中检索项目?

python dictionary

57
推荐指数
6
解决办法
4万
查看次数

从OrderedDict和defaultdict继承子类

Raymond Hettinger 展示了一种非常酷的方式来组合集合类:

from collections import Counter, OrderedDict
class OrderedCounter(Counter, OrderedDict):
  pass
# if pickle support is desired, see original post
Run Code Online (Sandbox Code Playgroud)

我想为OrderedDict和defaultdict做类似的事情.但是,当然,defaultdict有不同的__init__签名,因此需要额外的工作.解决这个问题最简洁的方法是什么?我使用Python 3.3.

我在这里找到了一个很好的解决方案:https://stackoverflow.com/a/4127426/336527,但我想可能从defaultdict中获得可能会使这更简单?

python collections multiple-inheritance python-3.x

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

python中有序字典的有序字典

我需要一个存储字典的字典数据结构,如下所示:

custom = {1: {'a': np.zeros(10), 'b': np.zeros(100)}, 
          2: {'c': np.zeros(20), 'd': np.zeros(200)}}
Run Code Online (Sandbox Code Playgroud)

但问题是我在代码中多次迭代这个数据结构.每次迭代它时,我都需要遵守迭代的顺序,因为这个复杂数据结构中的所有元素都映射到一维数组(如果你愿意,可以序列化),因此顺序很重要.我考虑过编写一个有序dict的订单dict,但我不确定这是正确的解决方案,因为我似乎可能选择了错误的数据结构.对我的案子来说,最合适的解决办法是什么?

UPDATE

所以这就是我到目前为止所提出的:

class Test(list):

    def __init__(self, *args, **kwargs):

        super(Test, self).__init__(*args, **kwargs)

        for k,v in args[0].items():
            self[k] = OrderedDict(v)

        self.d = -1
        self.iterator = iter(self[-1].keys())
        self.etype = next(self.iterator)
        self.idx = 0


    def __iter__(self):
        return self

    def __next__(self):

        try:
            self.idx += 1
            return self[self.d][self.etype][self.idx-1]

        except IndexError:

            self.etype = next(self.iterator)
            self.idx = 0
            return self[self.d][self.etype][self.idx-1]

    def __call__(self, d):

        self.d = -1 - d
        self.iterator = …
Run Code Online (Sandbox Code Playgroud)

python dictionary

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

python循环似乎不遵循序列?

我觉得我在这里错过了一些明显的东西!

seq = {'a': ['1'], 'aa': ['2'], 'aaa': ['3'], 'aaaa': ['4'], 'aaaaa': ['5']}
for s in seq:
    print s
Run Code Online (Sandbox Code Playgroud)

输出:

a
aa
aaaa
aaaaa
aaa
Run Code Online (Sandbox Code Playgroud)

当然它应该输出:

a
aa
aaa
aaaa
aaaaa
Run Code Online (Sandbox Code Playgroud)

这里出了什么问题?

谢谢 :)

python dictionary for-loop list

3
推荐指数
2
解决办法
607
查看次数

Python dict:获取按键列表排序的值

我不想使用numpy来处理2D矩阵

我想出了如何创建看起来像行和列字典的东西.如果我想查找单个值,它可以正常工作.

但我无法弄清楚如何以与使用我的列相同的顺序从一行获取值

from collections import defaultdict

dic = defaultdict(dict)
rowKeys = ['1','2','3']
columnKeys = ['alfa', 'omega', 'bravo', 'charlie']

# Filling up the dictionary with values
from random import randrange
for rKey in rowKeys:
    for cKey in columnKeys:
        dic[rKey][cKey] = randrange(50)

""" 
    print dic
    defaultdict(<type 'dict'>, {
    '1': {'omega': 28, 'charlie': 42, 'alfa': 13, 'bravo': 45}, 
    '3': {'omega': 8, 'charlie': 5, 'alfa': 13, 'bravo': 4}, 
    '2': {'omega': 19, 'charlie': 42, 'alfa': 29, 'bravo': 26}})
"""
# print dic[rowKeys[0]].keys()
# ['omega', …
Run Code Online (Sandbox Code Playgroud)

python dictionary

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

按键排序defaultdict?

我按时间戳将对象列表分组在一起:

object_list = [
{
    timestamp: datetime.strptime("01/01/2014", "%d/%m/%y"),
},
{
    timestamp: datetime.strptime("12/05/2014", "%d/%m/%y"),
},
{
    timestamp: datetime.strptime("03/01/2014", "%d/%m/%y"),
},
{
    timestamp: datetime.strptime("01/01/2014", "%d/%m/%y"),
}]

date_grouped_objects = defaultdict(list)

for obj in object_list:
    date_grouped_objects[obj.timestamp].append(obj)
Run Code Online (Sandbox Code Playgroud)

这给了我我想要的东西,一个按时间戳属性组合在一起的对象列表.

问题:我现在想要通过键(时间戳)对date_grouped_objects进行排序,但是不清楚如何使用sorted来实现这一点?因此,最近日期的最多组将是最后一个

所以我要追求的是:

[
    ["01/01/2014"] = [...],
    ["03/01/2014"] = [...],
    ["12/05/2014"] = [...],
]
Run Code Online (Sandbox Code Playgroud)

键实际上是日期对象,而不是字符串.

python

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