Python dict更改顺序-如何获得第一次出现?
我花了2个小时试图获取具有特定值的键值对的第一个匹配项。(元组是键,值是整数) 为什么这是相关的?口述按键排序 我可以pprint()这个dict,我看到第一个出现的是我想要的-但是在dict上迭代并使用itemgetter输出第一个出现的结果是错误的元组 可运行代码如下所示: 相关的行是54到86(请注意较大的调试部分) 这将是我从pprint获取第一个事件的解决方案:Python dict更改顺序-如何获得第一次出现?,python,loops,sorting,dictionary,Python,Loops,Sorting,Dictionary,我花了2个小时试图获取具有特定值的键值对的第一个匹配项。(元组是键,值是整数) 为什么这是相关的?口述按键排序 我可以pprint()这个dict,我看到第一个出现的是我想要的-但是在dict上迭代并使用itemgetter输出第一个出现的结果是错误的元组 可运行代码如下所示: 相关的行是54到86(请注意较大的调试部分) 这将是我从pprint获取第一个事件的解决方案: print(max(allsmall.items(), key=operator.itemgetter(1))[0]) #a
print(max(allsmall.items(), key=operator.itemgetter(1))[0]) #almost minimum
但是第二次发生了
这完全打破了秩序:
print(max(allsmall.items(), key=operator.itemgetter(0))[0])
应为:可以访问第一个匹配项,因为pprint()正确打印它
实际:我第二次出现……使用
OrderedDict
。它保留了插入顺序,因此您应该获得第一个匹配项。使用OrderedDict
。它保留了插入顺序,因此应该第一次出现。在Python 3.6之前,Python字典本质上是无序的(事实上,直到Python 3.7才保证这一点)。即使是这种情况,如果您依赖于字典的顺序,这意味着您可能不应该使用字典,而应该使用其他数据结构。注意,对于这种类型的东西,我不相信pprint
的输出键是(正如在stackoverflow上有很好的文档记录和感叹的那样),ordereddict需要用元组数组填充,应该对其进行排序。它可以用任何有序的键值对填充。在Python 3.6之前,Python字典本质上是无序的(事实上,直到Python 3.7才保证这一点)。即使是这种情况,如果您依赖于字典的顺序,这意味着您可能不应该使用字典,而应该使用其他数据结构。注意,对于这种类型的东西,我不相信pprint
的输出。键是(正如在stackoverflow上有很好的文档记录和感叹的那样),ordereddict需要用元组数组填充,元组数组应该被排序。它可以用任何有序的键值对iterable填充。键是(在stackoverflow上有很好的记录和感叹)ordereddict需要填充一个元组数组,应该进行排序。关键是(在stackoverflow上有很好的记录和感叹)ordereddict需要填充一个元组数组,应该进行排序。
print(max(allsmall.items(), key=operator.itemgetter(0))[0])