5
def parse_urls(weeks_urls):
    for wkey in weeks_urls.keys():
        results=urllib2.urlopen(weeks_urls[wkey])
        lines = list(csv.reader(results))
        lines=clean_lines(lines)
        week_dict=dict.fromkeys(lines[i][1] for i in range(len(lines)))
        fare_data=list((lines[i][1:]) for i in range(3,len(lines)))
        fare_data=get_fare_data(fare_data)
        n=3
        for station in week_dict: .....
.......

当我用来dict.fromkeys( )从字符串列表中生成字典时,它会自动对它们进行排序,生成一个字典,其中的字符串按字母顺序排列。我需要保留字符串的原始顺序。有没有办法做到这一点?

感谢这里的任何帮助

谢谢!

4

2 回答 2

7

它会自动对它们进行排序,生成一个按字母顺序排列的字符串

这不太正确。Python 的标准dict是无序的,这意味着它可以随意重新排序项目。因此,您不能依赖以任何特定顺序出现的键(也不能依赖于在插入/删除中保持相同的顺序)。

要保留插入顺序,您可以使用collections.OrderedDict

In [6]: l = [1, 2, 20, 5, 10]

In [7]: list(dict.fromkeys(l).keys())
Out[7]: [1, 2, 10, 20, 5]

In [8]: list(collections.OrderedDict.fromkeys(l).keys())
Out[8]: [1, 2, 20, 5, 10]
于 2012-12-11T16:14:08.143 回答
3

Python字典是“无序的”——在字典中产生项目的顺序取决于实现(和插入顺序),有时可能几乎是随机的,或者在其他时间(显然)很好地排序。对于 Cpython,这里为感兴趣的读者提供了一些附加信息

您可以使用 acollections.OrderedDict代替(它会记住插入顺序)。 OrderedDict在 python2.7 中添加,对于早期版本,python 官方文档中链接了一个ActiveState 配方。

于 2012-12-11T16:13:53.673 回答