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( )
从字符串列表中生成一个字典时,它会自动对它们进行排序,从而按字母顺序生成一个带字符串的字典。我需要保留字符串的原始顺序。有没有办法做到这一点?
感谢这里的任何帮助
谢谢!
答案 0 :(得分: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]
答案 1 :(得分:3)
Python dictionaries是“无序的” - 在字典中产生项目的顺序依赖于实现(和插入顺序),有时几乎是随机的,或者在其他时间(显然)很好地排序。对于Cpython,这里有一些additional information感兴趣的读者。
您可以使用collections.OrderedDict
代替(记住广告订单)。在python2.7中添加了OrderedDict
,对于早期版本,在python官方文档中链接了一个ActiveState recipe。