为什么我的字典不是数字顺序,我可以更改分隔符吗?

时间:2017-02-14 00:19:08

标签: python dictionary

我必须从文本文件中制作两个字典化合物字典。它们在文本文件中以数字顺序列出,从C00001到C20990(C表示复合),然而,当我打印字典时,一切都乱七八糟,而不是数字顺序。我怎么能改变呢?另外,有没有办法在键的左侧放置双引号,在值字符串的右侧有另一个双引号?并且,另外,当我尝试打印它以便每个键都有一个新行时,它告诉我我有一个键错误(特别是对于条目C20990。我假设这是因为它是字典中的最后一个) ,但这只会发生,如果它已经是数字顺序,它不是,所以它让我担心在最后的for循环中,它会发生更多的条目)

import sys
entries = []
names = []
a = {} #achiral
c = {} #chiral
for line in file:
    if line.startswith("ENTRY"):
        s = line[5:len(line)]
        s = s.split()
        entries.append(s[0])

    if line.startswith("NAME"):
        s = line[4:len(line)]
        s = s.strip()
        st = "".join(s+" ")

        line=next(file)
        check = False
        while not line.startswith("FORMULA") and not line[0].isalpha():
            s = line.strip()
            if s.find("(R)")>=0:
                check = True
            if s.find("(S)")>=0:
                check = True
            if s.find("L-")>=0:
                check = True
            if s.find("D-")>=0:
                check = True
            st+=s+" "
            line = next(file)

        st = st.strip()
        if not check:
            a[entries[-1]] = st
        else:
            c[entries[-1]] = st
        names = []
        st = ""
for key in c:
    print("{0}: {1}".format(key, c[entries[-1]]))

3 个答案:

答案 0 :(得分:0)

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

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

我不确定您为什么会收到密钥错误,但可以将其添加到字典a而不是c

答案 1 :(得分:0)

Python dict是一个未分类的容器,实现为There are many threads。哈希字符串“随机化”他们的订单。甚至这个顺序在将它们实际插入散列结构时也不会被保留。

>>> 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]]))

答案 2 :(得分:0)

  1. 当我去打印字典时,一切都乱七八糟,而不是数字顺序。我怎么能改变呢?

    Python字典使用哈希表以无序方式索引所有键。另外,您使用的密钥C20990string,但您可以轻松提取数字并将其转换为int

    我建议您在将其添加到条目时执行此操作,即在第一个if子句中,使用

    s = s.split()
    s = int(s[1:])
    

    在打印输入

    之前对键进行排序
    for key in sorted(c.keys()):
    
  2. 另外,有没有办法在键的左侧放一个双引号,另一个双引号在值字符串的右侧?

    是的,请使用output formatting

  3. 另外,当我尝试打印它以便每个键都有一个新行时,它告诉我有一个键错误(特别是对于条目C20990)。

    您使用c[entries[-1]],但此条目可能是非手性的,属于字典a。您需要使用c的密钥,请参阅Q1中的代码。