【问题标题】:Iterating over all the values and finding the key for the value遍历所有值并找到该值的键
【发布时间】:2020-05-05 18:17:43
【问题描述】:

我需要遍历字典并找到某些值的键。字典如下:

z1 = {9376: 172, 1: 168, 2: 179, 3: 2, 132: 9740, 145: 179, 137: 185, 135: 1, 142: 13528, 113: 158, 9781: 176, 9782: 168, 152: 13527, 9375: 9504, 127: 1}

还有 我有一个列表,我想检查字典并找出相应的键。

z =[13527,9741,9740,9505,9504,200,189,185,176,172,168,1]

我需要找出 z1 中存在哪些 z 值,然后制作匹配值和 key 的字典。以下是我正在使用的代码

for i in range(len(z1)) :
    try :
        p = z[i]
        a = list(z1.keys())[list(z1.values()).index(p)]
        e1.append(a)
        e2.append(p)
    except (ValueError, IndexError,AttributeError) :
        continue
e3 = list(zip(e1,e2))
print(e3)

我得到的结果是

[(152, 13527), (132, 9740), (9375, 9504), (137, 185), (9781, 176), (9376, 172), (1, 168), (135, 1)]

现在在字典 z1 中,您可以看到值 168,1 重复了两次并且具有唯一键。当我运行 for 循环时,我只得到单个键值对。我应该怎么做才能使所有键具有相同的值。即我的最终答案应该像

[(152, 13527), (132, 9740), (9375, 9504), (137, 185), (9781, 176), (9376, 172), (1, 168), (9782,168) (135, 1), (127,1)]

【问题讨论】:

    标签: python list python-2.7 dictionary python-3.3


    【解决方案1】:

    也许这就是你需要的:

    e3 = [(k, i) for i in z for k in z1 if i==z1[k]]
    

    给我:

    [(152, 13527), (132, 9740), (9375, 9504), (137, 185), (9781, 176), (9376, 172), (1, 168), (9782, 168), (135, 1), (127, 1)]
    

    【讨论】:

    • 非常感谢您的指导.. 它的工作... :) 。同样在上面的代码中,我需要 e1.append(a) 。根据您的建议,我有可能提取与 e1.append(a) 中类似的值
    【解决方案2】:

    遍历字典的值首先违背了使用字典的目的。

    如果您需要存储key, value,因为您在某处使用它,那么我还建议构建一个value, key 的反向字典。

    如果值不是唯一的,请构建一个像 value, [list_of_keys] 这样的字典。这种方法会快得多。

    每次遍历值都是O(n),但构建反向字典是O(1)。对于较大的 n 值,您的程序将运行得更快。

    【讨论】:

    • 谢谢...我是编码新手...我正在通过在线资源探索事物。如果你能给我一些关于如何对你的建议进行编码的提示,那将是非常大的帮助.. :)..
    猜你喜欢
    • 1970-01-01
    • 2017-09-07
    • 1970-01-01
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 2021-09-27
    • 2016-08-19
    • 1970-01-01
    相关资源
    最近更新 更多