2013-07-16 21 views
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'} 

我想有以相同的顺序与上述两份名单是dictonnary。 感谢foir看着它。

回答

1

Python词典没有设置顺序。你看到的行为完全正常和正确。

引述Python documentation for the dict.items() method

键和值指的是这个非随机的,不同的Python实现不同而不同,取决于插入和删除的字典的历史任意顺序列出。

请参阅Why is the order in dictionaries and sets arbitrary?为什么是这样。

如果需要排序要保存,使用collections.OrderedDict()代替:

from collections import OrderedDict 

dict_lines = OrderedDict(zip(li_lines, li_atoms))