Python 为什么我的字典不是按数字顺序排列的,我可以更改delimeters吗?
我不得不从一个文本文件中编成两本复合词词典。它们在文本文件中按数字顺序列出,从C00001到C20990(C表示复合),然而,当我去打印字典时,所有内容都很混乱,并且不是按数字顺序。我怎样才能改变这一点?还有,有没有办法将双引号放在键的左侧,将另一个双引号放在值字符串的右侧?另外,当我试图打印它,使每个键都有一个新行时,它告诉我有一个键错误(特别是对于条目C20990。我假设这是因为它是字典中的最后一个条目,但只有当它已经是数字顺序时才会发生,而不是数字顺序,所以我担心在最后的for循环中,会出现更多的条目)Python 为什么我的字典不是按数字顺序排列的,我可以更改delimeters吗?,python,dictionary,Python,Dictionary,我不得不从一个文本文件中编成两本复合词词典。它们在文本文件中按数字顺序列出,从C00001到C20990(C表示复合),然而,当我去打印字典时,所有内容都很混乱,并且不是按数字顺序。我怎样才能改变这一点?还有,有没有办法将双引号放在键的左侧,将另一个双引号放在值字符串的右侧?另外,当我试图打印它,使每个键都有一个新行时,它告诉我有一个键错误(特别是对于条目C20990。我假设这是因为它是字典中的最后一个条目,但只有当它已经是数字顺序时才会发生,而不是数字顺序,所以我担心在最后的for循环中,会出
Python字典是无序的。您可以在打印之前对它们进行排序
for key, value in sorted(c.items()):
print("{0}: {1}".format(key, value))
我不知道为什么会出现关键错误,但它可以被添加到dict
a
而不是cPythondict
是一个未排序的容器,实现为一个。哈希字符串“随机化”它们的顺序。甚至在实际将它们插入哈希结构时,这个顺序也不会被保留
>>> sorted(string.ascii_uppercase, key=hash)
['G', 'Z', 'M', 'V', 'L', 'K', 'C', 'J', 'P', 'N', 'D', 'O', 'Q', 'F', 'S', 'R', 'W', 'E', 'X', 'A', 'Y', 'B', 'I', 'U', 'H', 'T']
>>> set(_)
{'F', 'M', 'B', 'W', 'G', 'D', 'A', 'C', 'X', 'R', 'K', 'E', 'N', 'V', 'U', 'Q', 'T', 'Z', 'S', 'I', 'L', 'P', 'J', 'H', 'Y', 'O'}
如果要对键进行排序,请显式排序:
for key in sorted(c.keys()):
print("{0}: {1}".format(key, c[entries[-1]]))
当我去打印字典时,所有的东西都乱七八糟,而且不是按数字顺序排列的。我怎么能改变这种情况呢
Python字典使用哈希表以无序方式索引所有键。此外,您使用的键如C20990
是一个字符串
,尽管您可以轻松提取数字并将其转换为int
我建议您在将其添加到条目时这样做,即在第一个if
子句中,使用
s = s.split()
s = int(s[1:])
并在打印条目前对密钥进行排序
for key in sorted(c.keys()):
还有,有没有办法将双引号放在键的左侧,将另一个双引号放在值字符串的右侧
是的,用这个
另外,当我试图打印它,使每个键都有一个新行时,它告诉我有一个键错误(特别是对于条目C20990)
您使用的是c[条目[-1]]
,但此条目可能是非常规条目,属于字典a
。您需要使用c
的键,请参见Q1中的代码
你可以使用sortedDict
类,因为我对编程还不熟悉,所以我想我不太明白我应该在那里为#3做什么。你能解释一下吗?@Kevin你可以使用@Hesham Attia的答案中的方法分别打印字典c
和a
。如果你想打印条目中的键,你可以使用a
中的if条目[i]测试键是否在a
或c
中。如果需要帮助,请在Python
中签出dict
和列表
类型。
for key in sorted(c.keys()):