当前位置: 首页 > 知识库问答 >
问题:

如何强制字典元素按顺序书写?

长孙阳成
2023-03-14

我正在尝试使用XlsxWriter将Python写入Excel工作簿。我有一本字典叫Pg,它的键是元组。

for key,value in Pg.iteritems():
     for t in range(1,4):
      if key==(0,t):
       worksheet.write(row,col,value.x)
       row += 1

我想在列中写入键(0,t)的值,但这些值不是按正常顺序显示的。例如,如果我的字典如下所示:

Pg={(0,1):1,(0,2):2,(0,3):3}

我进入Excel:

1
3
2

当我在第二个for循环中严格确定了我希望如何编写我的值时,为什么会发生这种情况?

共有1个答案

堵存
2023-03-14

我想你已经意识到,当你反复阅读一本字典时,你不能保证有任何特定的顺序。你所面临的问题是,你试图强制订购的方式是有缺陷的。

for key,value in Pg.iteritems():
    for t in range(1,4):
        if key==(0,t):
            # ...

它首先迭代每个键和值对。然后,如果密钥与某个条件匹配,则在该文件中输出。如果您为循环切换的顺序,您将得到您想要的,但这种方法根本没有效率。

更简单地说,您可以像这样迭代排序字典:

for key, value in sorted(Pg.iteritems()):
    worksheet.write(row, col, value.x)
    row += 1

 类似资料:
  • 问题内容: 这是我的Django代码,无法正常运行: 有没有办法保持原始元素的顺序,所以帖子将按in排序? 谢谢! 编辑: Python 2.6,Django 1.3 问题答案: 使用SortedDict代替dict() SortedDict保持其属性中的顺序。因此,您可以根据需要操纵顺序而无需重建字典。例如,要反转SortedDict的顺序,只需使用

  • 问题内容: 我已经在Redis中使用排序集实现了排行榜。我希望具有相同分数的用户按时间顺序排序,即,第一名的用户应排名更高。当前,redis支持词典顺序。有没有一种方法可以覆盖它。手机号码被用作排序集中的成员。 我想到的一种解决方案是在移动电话号码之前添加时间戳,并维护散列以映射移动电话号码和时间戳。 这样,在任何情况下,我都可以通过从哈希添加前缀来获得给定用户的排名。 现在这不是我想要的。这将与

  • 问题内容: 在Python中,我有字典列表: 我想要一个最终的字典,其中将包含所有字典的总和。即结果将是: 注意:列表中的每个字典将包含相同数量的键,值对。 问题答案: 有点丑陋,但单线:

  • 问题内容: 我有如下代码: 效果很好,但似乎是以相反的字母顺序列出文件。有没有一种快速的方法可以告诉您按字母顺序列出文件? 问题答案: 带有或不带有过滤器的方法不能保证任何顺序。 但是,它确实返回一个数组,您可以使用对其进行排序。 这是可行的,因为是一个可比较的类,默认情况下按字典顺序对路径名进行排序。如果要对它们进行不同的排序,则可以定义自己的比较器。 如果您更喜欢使用流: 下面是一种更现代的方

  • 问题内容: 是否可以按照插入顺序从Python字典中检索项目? 问题答案: 如果您使用的是CPython 3.6+(或其他任何Python实现的Python 3.7+),则默认情况下,标准Python会执行此操作。 在旧版Python上,您可以使用。

  • 问题内容: 有一个现有的函数以下面的结尾,其中是一个字典: 返回给定字典的未排序迭代器。我想返回一个遍历按 key 排序的项目的迭代器。我怎么做? 问题答案: 尚未对此进行广泛的测试,但是可以在Python 2.5.2中使用。 如果您习惯于使用迭代器代替迭代器,那么上面的解决方案仍然可以使用 在Python 3.x中,使用代替返回迭代器。