GVKun编程网logo

是否保证python字典中的keys()和values()的顺序相同?(python字典key不存在抛出异常)

11

如果您想了解是否保证python字典中的keys和和values的知识,那么本篇文章将是您的不二之选。我们将深入剖析是否保证python字典中的keys的各个方面,并为您解答和values的疑在这篇文

如果您想了解是否保证python字典中的keys和values的知识,那么本篇文章将是您的不二之选。我们将深入剖析是否保证python字典中的keys的各个方面,并为您解答和values的疑在这篇文章中,我们将为您介绍是否保证python字典中的keys的相关知识,同时也会详细的解释和values的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

是否保证python字典中的keys()和values()的顺序相同?(python字典key不存在抛出异常)

是否保证python字典中的keys()和values()的顺序相同?(python字典key不存在抛出异常)

本机内置的python dict是否保证以相同的方式对keys()values()列表进行排序?

d = {''A'':1, ''B'':2, ''C'':3, ''D'':4 } # or any other contentotherd = dict(zip(d.keys(), d.values()))

我一直有d == otherd吗?

不管是对还是错,我对这个问题上的任何参考指针都感兴趣。

PS:我了解上述属性并非对每个行为像字典的对象都是正确的,我只是想知道内置的字典。当我进行测试时,看起来好像是真的,这也就不足为奇了,因为具有相同的顺序keys()并且values()可能是最简单的实现。但是我想知道是否明确定义了此行为。

答案1

小编典典

键和值以任意顺序列出,该顺序是非随机的,在Python实现中会有所不同,并且取决于字典的插入和删除历史。如果items()keys()values()iteritems()iterkeys(),和itervalues()被称为中间没有修改的字典,列表会直接对应。

从的文档中dict

c# – params关键字是否保证项目与列出的顺序相同?

c# – params关键字是否保证项目与列出的顺序相同?

我正在开发一个简单的API,它将接受许多IBehavIoUrs,然后在配置中应用它们.我使用params关键字设计它,因为通常只需要一个行为,但有时更多.

但是,以正确的顺序应用行为非常重要.

public void Configure(string wow,params IBehavIoUr[] behavIoUrs) { ... }

Configure("oh yes",new MustHappenFirst(),new MustHappenSecondly());

做这个

>技术上暗示行为
当发生时以相同的顺序发生
枚举? (在标准方面,
不仅仅是实际上明智的).
>在语义上和直觉上传达相同的行为?

谢谢.

解决方法

参数的评估将按从左到右的顺序进行,并且它们将按顺序放入数组中.

请注意,如果“null”是行为的有效值,则可能会遇到麻烦:

Configure("hello",null);

电话

Configure("hello",(IBehavIoUr[]) null);

Configure("hello",new IBehavIoUr[1] { null } );

所以要小心.

c# – 多维数组枚举器是否保证所有实现的顺序相同?

c# – 多维数组枚举器是否保证所有实现的顺序相同?

这总是会在所有平台上以相同的顺序打印元素吗?

foreach (var el in multidimArray) Console.WriteLine(el);

我正在寻找规格或任何官方报价.

解决方法

是的,内置数组的枚举顺序是明确定义的,与平台无关.

参见C# Specification的相关部分(8.8.4 foreach声明):

The order in which foreach traverses the elements of an array,is as follows:

  • For single-dimensional arrays elements are traversed in increasing index order,starting with index 0 and ending with index Length – 1.
  • For multi-dimensional arrays,elements are traversed such that the indices of the rightmost dimension are increased first,then the next left dimension,and so on to the left.

globals(),locals()和vars()之间有什么区别?

globals(),locals()和vars()之间有什么区别?

是什么区别globals(),locals()vars()?他们返回什么?更新结果有用吗?

答案1

小编典典

这些每个都返回一个字典:

  • globals() 总是返回模块名称空间的字典
  • locals()总是返回当前名称空间的字典
  • vars()返回当前名称空间的字典(如果不带参数调用)或参数的字典。

locals并vars可以使用更多解释。如果locals()在函数内部调用,它将使用该时刻的当前局部变量名称空间(加上任何闭包变量)的值来更新字典并返回它。locals()每次对同一堆栈框架的多次调用都会返回相同的字典-它作为其f_locals属性附加到堆栈框架对象。dict的内容在每次locals()调用和每个f_locals属性访问时更新,但仅在此类调用或属性访问时更新。分配变量时,它不会自动更新,并且在dict中分配条目不会分配相应的局部变量:

import inspectdef f():    x = 1    l = locals()    print(l)    locals()    print(l)    x = 2    print(x, l[''x''])    l[''x''] = 3    print(x, l[''x''])    inspect.currentframe().f_locals    print(x, l[''x''])f()

给我们:

{''x'': 1}{''x'': 1, ''l'': {...}}2 12 32 2

第一个print(l)只显示一个’x’条目,因为分配要l在locals()调用之后进行。再次print(l)调用locals()后,第二个显示一个l条目,即使我们没有保存返回值。第三和第四print步表明分配变量不会更新l,反之亦然,但是在我们访问之后f_locals,局部变量会locals()再次复制到其中。

两个注意事项:

此行为是CPython特有的-其他Python可能允许更新使它自动返回到本地名称空间。
在CPython 2.x中,可以通过exec “pass”在函数中放置一行来使其工作。这会将函数切换到较旧的执行速度较慢的模式,该模式使用locals()dict作为局部变量的规范表示。
如果locals()被称为外函数返回实际的字典,它是当前的命名空间。命名空间进一步的变化被反映在字典中,并到词典中的变化被反映在名称空间:

class Test(object):    a = ''one''    b = ''two''    huh = locals()    c = ''three''    huh[''d''] = ''four''    print huh

给我们:

{  ''a'': ''one'',  ''b'': ''two'',  ''c'': ''three'',  ''d'': ''four'',  ''huh'': {...},  ''__module__'': ''__main__'',}

到目前为止,我所说的所有事情locals()也适用于vars()…这里是不同的: vars()接受单个对象作为其参数,如果给它一个对象,它将返回该__dict__对象的。对于典型的对象,__dict__大多数属性数据都存储在该对象中。这包括类变量和模块全局变量:

class Test(object):    a = ''one''    b = ''two''    def frobber(self):        print self.ct = Test()huh = vars(t)huh[''c''] = ''three''t.frobber()

这给了我们:

three

请注意,函数 __dict__是其属性名称空间,而不是局部变量。对于一个函数来说__dict__,存储局部变量是没有意义的,因为递归和多线程意味着一个函数可以同时有多个调用,每个调用都有自己的局部变量:

def f(outer):    if outer:        f(False)        print(''Outer call locals:'', locals())        print(''f.__dict__:'', f.__dict__)    else:        print(''Inner call locals:'', locals())        print(''f.__dict__:'', f.__dict__)f.x = 3f(True)

这给了我们:

Inner call locals: {''outer'': False}f.__dict__: {''x'': 3}Outer call locals: {''outer'': True}f.__dict__: {''x'': 3}

在这里,f递归调用本身,因此内部和外部调用重叠。每个调用时都会看到自己的局部变量locals(),但是两个调用都看到相同的f.dict,并且其中f.__dict__没有任何局部变量。

LinkedHashMap的keySet()和values()方法的行为

LinkedHashMap的keySet()和values()方法的行为

考虑我创建一个LinkedHashMap,如下所示:

Map<String, String> map = new LinkedHashMap<String, String>();map.put("a", "aa");map.put("b", "bb");map.put("c", "cc");

当我打电话keySet()给我时,有没有给我订购一套?如果我打电话给我values(),这些也是吗?

编辑

很抱歉,是有序的,没有排序。

答案1

小编典典

首先LinkedHashMap有序 但没有 排序TreeMap排序 (并因此 有序 以及)。

这就是说,你不能指望的输出keySet(),并values()进行排序。实际上,JavaDoc说 与订单无关 (事实证明,顺序
:由JavaDoc的保证是保证键和值从一个LinkedHashMap的对象返回的顺序?这些集合的,但看他们执行应遵循基本的顺序)Map

为了解决您对这个问题的最新修改:它不是合同的一部分,实际上LinkedHashMapkeySet()至没有实现,values()而是使用基类的(HashMap)版本。即使基于实现可以看到顺序被保留,但如果您希望应用程序具有可移植性,则不应该依赖该顺序。

今天关于是否保证python字典中的keys和values的介绍到此结束,谢谢您的阅读,有关c# – params关键字是否保证项目与列出的顺序相同?、c# – 多维数组枚举器是否保证所有实现的顺序相同?、globals(),locals()和vars()之间有什么区别?、LinkedHashMap的keySet()和values()方法的行为等更多相关知识的信息可以在本站进行查询。

本文标签: