【问题标题】:How to get the index with the key in a dictionary?如何使用字典中的键获取索引?
【发布时间】:2013-01-10 10:12:01
【问题描述】:

我有一个 python 字典的键,我想在字典中获取相应的索引。假设我有以下字典,

d = { 'a': 10, 'b': 20, 'c': 30}

在给定键值'b'的情况下,是否有python函数的组合以便我可以获得索引值1?

d.??('b') 

我知道它可以通过循环或 lambda(嵌入循环)来实现。只是觉得应该有更直接的方法。

【问题讨论】:

  • d['b'] 有什么问题?
  • d['b'] 会给你 20。但我实际上想得到字典中键的位置,即 1。我将字典创建为有序字典。跨度>
  • 在字典中,键是无序的。因此,您可以在迭代密钥时获取任何密钥。
  • 如果你有一个有序的字典,那么d.keys().index(k) 应该这样做。
  • @Seanny123 你没有提到 使用的是什么版本的 Python。大概是 Python 3,见python.org/dev/peps/pep-3106 所以,list(d.keys()).index(k)。虽然希望在 Python 3 中有更好的解决方案,但这不需要创建所有键的列表......

标签: python python-2.7 dictionary indexing key


【解决方案1】:

使用 OrderedDicts:http://docs.python.org/2/library/collections.html#collections.OrderedDict

>>> x = OrderedDict((("a", "1"), ("c", '3'), ("b", "2")))
>>> x["d"] = 4
>>> x.keys().index("d")
3
>>> x.keys().index("c")
1

对于那些使用 Python 3 的人

>>> list(x.keys()).index("c")
1

【讨论】:

  • 很好的解决方案,但是,我想知道获取索引的复杂性(可能是 O(n))。我们可以通过索引值 > 或至少键或值来获取键值对吗?
  • 对于这个用例也可以考虑 Pandas dataframe,特别是如果您需要能够在分配的索引位置保持固定的情况下删除项目(即删除的项目会在数据中创建一个“洞”结构),或者如果您需要能够在结构中拥有多个具有相同“键”的项目(显然在这种情况下它不是真正的键)。
【解决方案2】:

python (

d = { 'a': 10, 'b': 20, 'c': 30}
newd = [('a',10), ('b',20), ('c',30)]

那么这段代码就可以用来查找具有特定值的键的位置

locations = [i for i, t in enumerate(newd) if t[0]=='b']

>>> [1]

【讨论】:

  • 你的答案是正确的,但搜索或插入的复杂性很高。那就是 ppl 使用 dictionay 的原因,orderedDict 类似于 java 中的 hashtable。
【解决方案3】:

不,没有直接的方法,因为 Python 字典没有固定的顺序。

来自documentation

键和值以非随机的任意顺序列出,因 Python 实现而异,并且取决于字典的插入和删除历史。

换句话说,b 的“索引”完全取决于之前在映射中插入和删除的内容:

>>> map={}
>>> map['b']=1
>>> map
{'b': 1}
>>> map['a']=1
>>> map
{'a': 1, 'b': 1}
>>> map['c']=1
>>> map
{'a': 1, 'c': 1, 'b': 1}

从 Python 2.7 开始,如果插入顺序对您的应用程序很重要,您可以改用 collections.OrderedDict() type

【讨论】:

    【解决方案4】:
    #Creating dictionary
    animals = {"Cat" : "Pat", "Dog" : "Pat", "Tiger" : "Wild"}
    
    #Convert dictionary to list (array)
    keys = list(animals)
    
    #Printing 1st dictionary key by index
    print(keys[0])
    
    #Done :)
    

    【讨论】:

    【解决方案5】:

    您只需将字典发送到list,然后您就可以选择您要查找的项目的索引。

    DictTest = {
        '4000':{},
        '4001':{},
        '4002':{},
        '4003':{},
        '5000':{},
    }
    
    print(list(DictTest).index('4000'))
    

    【讨论】:

      猜你喜欢
      • 2018-12-10
      • 1970-01-01
      • 2021-07-19
      • 2012-06-09
      • 1970-01-01
      • 2021-05-25
      • 2011-05-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多