代码之家  ›  专栏  ›  技术社区  ›  Saeed

如何在字典中获取索引,而不是键值

  •  -1
  • Saeed  · 技术社区  · 6 年前

    我有一本这样的字典:

    header= {'f1': 13, 'f2': 7, 'f3': 45};
    

    如你所见, header['f2'] = 7 具有最小值,此项是头中的第二项(其索引为1)。

    我做什么?

    我已经尝试使用此代码获取头中最小项的索引(此处为1),但它返回键值:

    index = min(header)
    

    输出:

    F2

    我想要什么?

    我想得到字典中最小项的索引,我该怎么做?

    3 回复  |  直到 6 年前
        1
  •  1
  •   jpp    6 年前

    字典没有索引

    即使在python 3.6+(官方为3.7+)中,字典都是 insertion ordered ,不能直接按位置提取键或值。同样的道理也适用于 collections.OrderedDict . 参见: Accessing dictionary items by position in Python 3.6+ efficiently .

    min + enumerate

    假设python 3.6+,您 可以 提取键/值的位置 基于插入顺序 通过迭代。在这种情况下,您可以使用 有习俗 lambda 功能:

    header = {'f1': 13, 'f2': 7, 'f3': 45}
    
    min_idx, (min_key, min_val) = min(enumerate(header.items()), key=lambda x: x[1][1])
    
    print((min_idx, min_key, min_val))
    
    (1, 'f2', 7)
    
        2
  •  0
  •   Bill M.    6 年前

    使用 header.values() 返回仅包含字典值的列表:

    >>> header= {'f1': 13, 'f2': 7, 'f3': 45}
    >>> header.values()
    [13, 7, 45]
    >>> print(min(header.values()))
    7
    

    编辑: 对不起,您需要相应的钥匙。有一种方法可以做到这一点,而不必包括任何其他特殊的库:

    print(header.keys()[header.values().index(min(header.values()))])
    

    虽然字典在python中没有排序,但是列表和从中获得的列表 .keys() .values() 排成一排。

        3
  •  -1
  •   sowlosc    6 年前

    list(header.values()).index(min(header.values()))

    这将返回dict中最小值的索引。