如果您想了解是否保证python字典中的keys和和values的知识,那么本篇文章将是您的不二之选。我们将深入剖析是否保证python字典中的keys的各个方面,并为您解答和values的疑在这篇文
如果您想了解是否保证python字典中的keys和和values的知识,那么本篇文章将是您的不二之选。我们将深入剖析是否保证python字典中的keys的各个方面,并为您解答和values的疑在这篇文章中,我们将为您介绍是否保证python字典中的keys的相关知识,同时也会详细的解释和values的运用方法,并给出实际的案例分析,希望能帮助到您!
本文目录一览:- 是否保证python字典中的keys()和values()的顺序相同?(python字典key不存在抛出异常)
- c# – params关键字是否保证项目与列出的顺序相同?
- c# – 多维数组枚举器是否保证所有实现的顺序相同?
- globals(),locals()和vars()之间有什么区别?
- LinkedHashMap的keySet()和values()方法的行为
是否保证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关键字是否保证项目与列出的顺序相同?
但是,以正确的顺序应用行为非常重要.
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# – 多维数组枚举器是否保证所有实现的顺序相同?
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()
?他们返回什么?更新结果有用吗?
答案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,如下所示:
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
。
为了解决您对这个问题的最新修改:它不是合同的一部分,实际上LinkedHashMap
甚keySet()
至没有实现,values()
而是使用基类的(HashMap
)版本。即使基于实现可以看到顺序被保留,但如果您希望应用程序具有可移植性,则不应该依赖该顺序。
今天关于是否保证python字典中的keys和和values的介绍到此结束,谢谢您的阅读,有关c# – params关键字是否保证项目与列出的顺序相同?、c# – 多维数组枚举器是否保证所有实现的顺序相同?、globals(),locals()和vars()之间有什么区别?、LinkedHashMap的keySet()和values()方法的行为等更多相关知识的信息可以在本站进行查询。
本文标签: