Python 为什么我的字典不是按数字顺序排列的,我可以更改delimeters吗?

Python 为什么我的字典不是按数字顺序排列的,我可以更改delimeters吗?,python,dictionary,Python,Dictionary,我不得不从一个文本文件中编成两本复合词词典。它们在文本文件中按数字顺序列出,从C00001到C20990(C表示复合),然而,当我去打印字典时,所有内容都很混乱,并且不是按数字顺序。我怎样才能改变这一点?还有,有没有办法将双引号放在键的左侧,将另一个双引号放在值字符串的右侧?另外,当我试图打印它,使每个键都有一个新行时,它告诉我有一个键错误(特别是对于条目C20990。我假设这是因为它是字典中的最后一个条目,但只有当它已经是数字顺序时才会发生,而不是数字顺序,所以我担心在最后的for循环中,会出

我不得不从一个文本文件中编成两本复合词词典。它们在文本文件中按数字顺序列出,从C00001到C20990(C表示复合),然而,当我去打印字典时,所有内容都很混乱,并且不是按数字顺序。我怎样才能改变这一点?还有,有没有办法将双引号放在键的左侧,将另一个双引号放在值字符串的右侧?另外,当我试图打印它,使每个键都有一个新行时,它告诉我有一个键错误(特别是对于条目C20990。我假设这是因为它是字典中的最后一个条目,但只有当它已经是数字顺序时才会发生,而不是数字顺序,所以我担心在最后的for循环中,会出现更多的条目)


Python字典是无序的。您可以在打印之前对它们进行排序

for key, value in sorted(c.items()):
   print("{0}: {1}".format(key, value))

我不知道为什么会出现关键错误,但它可以被添加到dict
a
而不是
c

Python
dict
是一个未排序的容器,实现为一个。哈希字符串“随机化”它们的顺序。甚至在实际将它们插入哈希结构时,这个顺序也不会被保留

>>> 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()):