[英]Python dictionary, lists ,join and Interpreter [duplicate]
这个问题已经在这里有了答案:
join in python连接字典中的列表元素和键,对吗?
每当我使用join联接列表时 ,输出的顺序与列表相同。 我知道它没有排序,并且当我在文件和解释器中提供相同的输出时,输出明显不同。
我的问题是解释器如何记住这一点,并且每次为该命令提供相同的输出。 是某种缓存还是??
>>> x = ['a','b','c']
>>> ','.join(x)
'a,b,c'
>>> x = ['c','b','a']
>>> ','.join(x)
'c,b,a'
使用字典
>>> z = {'a':3,'b':1,'c':4,'d':2}
>>> ','.join(z)
'b,d,a,c'
>>> z = {'a':3,'d':1,'c':4,'b':2}
>>> ','.join(z)
'c,d,a,b'
因此,我得出的结论是每次都会有所不同,但是当我在几条指令后以特定的顺序给出相同的字典时,它仍以某种顺序显示输出,每次解释器中输出的顺序都是相同的!
>>> z = {'foo':3,'bar':1,'egg':4,'spam':2}
>>> ','.join(z)
'egg,bar,foo,spam'
>>> z = {'bar':3,'foo':1,'egg':4,'spam':2}
>>> ','.join(z)
'egg,bar,foo,spam'
>>> z = {'bar':3,'foo':1,'spam':4,'egg':2}
>>> ','.join(z)
'spam,bar,foo,egg'
>>> z = {'foo':3,'bar':1,'egg':4,'spam':2}
>>> ','.join(z)
'egg,bar,foo,spam'
我可能遗漏了一些内容,但是口译员如何记住它。 明确的解释将大有帮助。
注意:正如在chris_rands提到的注释中看到的,我引用了' dict迭代在解释器会话中是固定的,因为环境变量PYTHONHASHSEED是固定的 '
更符合我所寻找的答案。 解释会很棒!
字典在python中没有顺序。 您可能会随机获得相同的订单,但不能保证。 如果您需要固定顺序的字典,请查看OrderedDict
: https : OrderedDict
您可以使用sortedcontainers ,然后加入
from sortedcontainers import SortedDict
z={'egg': 4, 'foo': 3, 'bar': 1, 'spam': 2}
','.join(SortedDict(z))
#'bar,egg,foo,spam'
在自然情况下:
','.join(dict(SortedDict(z))) #or ','.join(z)
#'egg,foo,bar,spam'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.