使用dict.fromkeys()禁用自动dict排序?

时间:2012-12-11 16:12:24

标签: python dictionary data-analysis

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( )从字符串列表中生成一个字典时,它会自动对它们进行排序,从而按字母顺序生成一个带字符串的字典。我需要保留字符串的原始顺序。有没有办法做到这一点?

感谢这里的任何帮助

谢谢!

2 个答案:

答案 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