相关疑难解决方法(0)

有没有比dict()更快的东西?

我需要一种更快的方式来存储和访问大约3GB的k:v对.其中kstringinteger并且v是一个np.array(),可以是不同的形状.有没有任何对象,比标准python dict在存储和访问这样的表时更快?例如,a pandas.DataFrame

到目前为止,我已经了解python dict是一个相当快速的哈希表实现,有什么比我的具体案例更好的?

python dictionary numpy python-3.x python-internals

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

有效地按Python 3.6+中的位置访问字典项

我理解字典是在Python 3.6+中排序插入,作为3.6中的实现细节和3.7+中的官方.

鉴于它们是有序的,似乎很奇怪,没有方法可以通过插入顺序检索字典的i项.该唯一的解决方案可出现有O(ñ)的复杂性,无论是:

  1. 通过O(n)进程转换为列表然后使用list.__getitem__.
  2. enumerate循环中的字典项,并在达到所需索引时返回值.同样,O(n)时间复杂度.

由于从list具有O(1)复杂度的项目中获取项目,是否有办法通过字典实现相同的复杂性?无论是定期dict还是collections.OrderedDict工作.

如果不可能,是否存在阻止这种方法的结构性原因,或者这只是一个尚未考虑/实施的特征?

python dictionary python-3.x python-internals

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

Object.keys()复杂性?

有人知道ECMAScript5的Object.keys()在常见实现中的时间复杂度吗?它是O(n)用于n钥匙?假设哈希实现,时间是否与哈希表的大小成比例?

我正在寻找语言实现者或某些现实世界基准测试的保证.

javascript performance time-complexity ecmascript-5

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

如何在python dict中反转键的顺序?

这是我的代码:

a = {0:'000000',1:'11111',3:'333333',4:'444444'}

for i in a:
    print i
Run Code Online (Sandbox Code Playgroud)

表明:

0
1
3
4
Run Code Online (Sandbox Code Playgroud)

但我想要它显示:

4
3
1
0
Run Code Online (Sandbox Code Playgroud)

那么,我该怎么办?

python reverse dictionary

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

为什么排序列表大于未排序列表

我有一个列表my_list(该列表包含utf8字符串):

>>> len(my_list)
8777
>>> getsizeof(my_list)                     #  <-- note the size
77848
Run Code Online (Sandbox Code Playgroud)

出于某种原因,排序列表(my_sorted_list = sorted(my_list))使用更多内存:

>>> len(my_sorted_list)
8777
>>> getsizeof(my_sorted_list)              #  <-- note the size
79104
Run Code Online (Sandbox Code Playgroud)

为什么sorted返回一个列表,在内存中占用的空间比初始未排序列表多?

python sorting list python-3.x python-internals

21
推荐指数
2
解决办法
424
查看次数

Python Pandas GroupBy获取组列表

我有一行代码:

g = x.groupby('Color')
Run Code Online (Sandbox Code Playgroud)

颜色有红色,蓝色,绿色,黄色,紫色,橙色和黑色.我该如何退回此清单?对于类似的属性,我使用x.Attribute并且它工作正常,但x.Color的行为方式不同.

python pandas

19
推荐指数
5
解决办法
6万
查看次数

OrderedDict如何知道已经实例化的字典的元素顺序?

我正在玩OrderedDictPython 3.6中的类型,并且对它的行为感到惊讶.当我dict在IPython中创建这样的简单时:

d = dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
Run Code Online (Sandbox Code Playgroud)

我明白了:

{'guido': 4127, 'jack': 4098, 'sape': 4139}
Run Code Online (Sandbox Code Playgroud)

作为输出,由于某种原因,它不会在实例化时保留元素的顺序.现在,当我创建一个OrderedDictd这样的:

od = OrderedDict(d)
Run Code Online (Sandbox Code Playgroud)

输出是:

OrderedDict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
Run Code Online (Sandbox Code Playgroud)

现在我问自己,OrderedDict-constructor 如何知道实例化时元素的顺序d?并且它总是表现相同,这样我可以依赖于元素的顺序OrderedDict吗?

我已经阅读了关于字典和OrderedDicts 的Python文档,但我没有找到我的问题的答案.

来自(sys.version)的输出:

In[22]: sys.version
Out[22]: '3.6.1 (default, Apr  4 2017, 09:40:21) \n[GCC 4.2.1 Compatible Apple LLVM 8.1.0 (clang-802.0.38)]'
Run Code Online (Sandbox Code Playgroud)

python dictionary ipython python-3.x python-3.6

16
推荐指数
2
解决办法
1059
查看次数

在python字典中提取第n个键?

给定一个python字典和一个整数n,我需要访问nth键.我需要在我的项目中反复多次这样做.

我写了一个函数来做到这一点:

def ix(self,dict,n):
    count=0
    for i in sorted(dict.keys()):
        if n==count:
            return i
        else:
            count+=1
Run Code Online (Sandbox Code Playgroud)

但问题是如果字典很大,反复使用时间复杂性会增加.

有没有一种有效的方法来做到这一点?

python performance dictionary

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

如何重写此函数以实现OrderedDict?

我有以下函数,它将XML文件解析为字典.

不幸的是,由于Python字典没有排序,我无法按照我的意愿循环遍历节点.

如何更改此值以便输出一个有序字典,该字典反映了使用'for'循环时节点的原始顺序.

def simplexml_load_file(file):
    import collections
    from lxml import etree

    tree = etree.parse(file)
    root = tree.getroot()

    def xml_to_item(el):
        item = None
        if el.text:
            item = el.text
        child_dicts = collections.defaultdict(list)
        for child in el.getchildren():
            child_dicts[child.tag].append(xml_to_item(child))
        return dict(child_dicts) or item

    def xml_to_dict(el):
        return {el.tag: xml_to_item(el)}

    return xml_to_dict(root)

x = simplexml_load_file('routines/test.xml')

print x

for y in x['root']:
    print y
Run Code Online (Sandbox Code Playgroud)

输出:

{'root': {
    'a': ['1'],
    'aa': [{'b': [{'c': ['2']}, '2']}],
    'aaaa': [{'bb': ['4']}],
    'aaa': ['3'],
    'aaaaa': ['5']
}}

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

python xml collections lxml

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

从Python字典中获取任意元素的最快方法是什么?

我有一个大约17,000键的字典.我想一次选择一个键 - 哪个键无关紧要,我不需要以任何特定顺序发生(随机就好了).但是,在我选择一个键之后,我会在选择另一个键之前更改字典,可能是通过添加或删除键.因此,我没有可以迭代的密钥集.

由于我不需要以任何特定顺序访问它们,我可以每次将dict键转换为列表,然后弹出第一个元素.但是,由于有17,000个键,因此在每次迭代时制作一个列表大约需要0.0005-7秒,这将花费我太多的时间来满足我的需要.有没有我可以采取的快捷方式,以便每次我想选择一个密钥时,我不必用dict键编译一个庞大的列表?

python dictionary

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