0

我的 zip 命令有问题。我对 python 相当陌生,并使用它来操作计算化学软件 Gaussian 的输入和输出。

我的问题如下。我将该原子序数和相应原子的坐标提取为两个单独的列表,然后将它们压缩在一起。问题是,新创建的字典虽然正确地将原子序数与相应的坐标相关联,但似乎打乱了这些对的顺序。

这是我的代码:

 str1 = lines[best_i + count].split()
 str1 = list(filter(None, str1))
 li_atoms.append(str1[1])
 li_lines.append(str1[3] + " " + str1[4] + " " + str1[5] + "\n")

 dict_lines = dict(zip(li_lines, li_atoms))
 new_line = str1[1] + " " + str1[3] + " " + str1[4] + " " + str1[5] + "\n"
 print(li_atoms)
 print(li_lines)
 print(new_line)

前 4 行用于显示我如何创建然后压缩的列表。这就是我得到的:

['6', '6', '6', '6', '6', '6', '1', '1', '1', '1', '1', '8', '1', '8', '1', '1', '8', '1', '1', '8', '1', '1']  

['-0.934843 0.899513 0.316846\n',   
'-2.190300 1.027357 -0.281071\n',   
'-2.985223 -0.106295 -0.461617\n',   
'-2.532226 -1.360236 -0.051572\n',   
'-1.273703 -1.473149 0.546850\n',   
'-0.466792 -0.350395 0.736201\n',   
'-2.544435 2.004569 -0.604798\n',     
'-3.961332 -0.002247 -0.927404\n',     
'-3.152766 -2.239891 -0.193462\n',   
'-0.912684 -2.443561 0.876875\n',   
'0.509490 -0.433361 1.204588\n',   
'-0.107548 1.983966 0.517635\n',   
'-0.544217 2.786118 0.189973\n',   
'1.956069 -1.097186 -1.539946\n',   
'0.995285 -1.167127 -1.420910\n',   
'2.137200 -0.128588 -1.433795\n',   
'2.906601 -0.987077 1.012487\n',   
'3.770505 -1.401214 1.155911\n',   
'2.616140 -1.289889 0.114737\n',   
'2.585476 1.353513 -0.478949\n',   
'1.755805 1.714987 -0.116377\n',   
'2.904746 0.753703 0.231017\n']    

{'-1.273703 -1.473149 0.546850\n': '6',   
'-2.190300 1.027357 -0.281071\n': '6',   
'-2.544435 2.004569 -0.604798\n': '1',   
'2.585476 1.353513 -0.478949\n': '8',   
'2.906601 -0.987077 1.012487\n': '8',   
'-3.961332 -0.002247 -0.927404\n': '1',   
'0.995285 -1.167127 -1.420910\n': '1',   
'3.770505 -1.401214 1.155911\n': '1',   
'-2.985223 -0.106295 -0.461617\n': '6',   
'-0.544217 2.786118 0.189973\n': '1',   
'2.616140 -1.289889 0.114737\n': '1',   
'-0.912684 -2.443561 0.876875\n': '1',   
'-2.532226 -1.360236 -0.051572\n': '6',   
'1.755805 1.714987 -0.116377\n': '1',   
'2.137200 -0.128588 -1.433795\n': '1',   
'1.956069 -1.097186 -1.539946\n': '8',   
'0.509490 -0.433361 1.204588\n': '1',   
'-3.152766 -2.239891 -0.193462\n': '1',   
'-0.934843 0.899513 0.316846\n': '6',   
'2.904746 0.753703 0.231017\n': '1',   
'-0.107548 1.983966 0.517635\n': '8',   
'-0.466792 -0.350395 0.736201\n': '6'}

而且我希望该词典的顺序与上述两个列表的顺序相同。谢谢你调查它。

4

1 回答 1

1

Python 字典没有固定的顺序。你看到的行为是完全正常和正确的。

引用该方法的Python 文档dict.items()

键和值以非随机的任意顺序列出,在 Python 实现中有所不同,并且取决于字典的插入和删除历史。

请参阅为什么字典和集合中的顺序是任意的?为什么会这样。

如果您需要保留订单,请使用 acollections.OrderedDict()代替:

from collections import OrderedDict

 dict_lines = OrderedDict(zip(li_lines, li_atoms))
于 2013-07-16T09:50:55.727 回答