2017-02-14 57 views
0

我不得不从文本文件制作两个字典的化合物词典。它们在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]])) 
+0

你可以使用在http://www.grantjenks.com/docs/sortedcontainers/sorteddict.html – Barmar

回答

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中的代码。

+0

了'sortedDict'类我是新来编程,所以我想我不完全得到什么我应该在那里为#3做。你可以解释吗? – Kevin

+0

@Kevin你可以在@Hesham Attia的回答中分别使用方法打印字典'c'和'a'。如果你想在'entries'中打印键,你需要使用'if'中的条目[i]来测试键是否在'a'或'c'中。如果您需要帮助,请在Python中检出'dict'和'list'类型。 –

0

Python字典是无序的。打印前您可以对它们进行分类。

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

我不知道为什么你拿到钥匙的错误,但它可以被添加到字典a而不是c

0

Python dict是一个未排序的容器,实现为hash table。散列字符串“随机化”他们的顺序。而且即使这个顺序在实际插入散列结构时也不会被保留。

>>> 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]])) 
相关问题