使用Python在字典中根据某些条件通过值查找键?

7

I have a dictionary like this:

 {'1956': 21,
     '2188': 76,
     '1307': 9,
     '1305': 22,
     '2196': 64,
     '3161': 1,
     '1025': 22,
     '321': 60,
     '1959': 1,
     '1342': 7,
     '3264': 2}

在每个键都唯一的情况下,我想从字典中获取那些值大于60的键。
输出如下:
  ['2188','2196']

我可以使用循环迭代并结合if条件来使用get('key')完成此操作,但这是一个繁琐的过程。有没有更高效的捷径呢?


2
[k for k, v in dict.items() if v > 60] OR [k for k in dict if dict[k] > 60] - Tomerikoo
3个回答

14
[k for k, v in mydict.items() if v > 60]

当然,这将需要与for循环大致相同的时间,只不过更加整洁。 - clubby789

1
keyValue =  {'1956': 21,
     '2188': 76,
     '1307': 9,
     '1305': 22,
     '2196': 64,
     '3161': 1,
     '1025': 22,
     '321': 60,
     '1959': 1,
     '1342': 7,
     '3264': 2}

for key, value in keyValue.items():
    if value > 60:
        print(key)

# Or just:
print([key for key, value in keyValue.items() if value > 60])

1

如果您想在不使用循环的情况下实现此目标,并且顺序不重要,可以尝试以下方法:

dc = {'1956': 21, '2188': 76, '1307': 9, '1305': 22, '2196': 64, '3161': 1, '1025': 22, '321': 60, '1959': 1, '1342': 7, '3264': 2}

dc_val = sorted(dc.values(), reverse = True)
target_index = dc_val.index(60)
keys = sorted(dc.keys(), key = lambda x: dc[x])
target_keys = keys[-target_index:]
print(target_keys)

>>> ['2196', '2188']

我们希望按值对字典进行排序,并选择值为60的索引,然后获取该索引之后所有对应值的键。因此,首先将倒序排序的值存储在dc_val中,为什么要反转呢?因为如果有多个值为60的情况下,这将对接下来的方法非常重要。假设你有两个值为60的键,那么dc_val将会是:

[76, 64, 60, 60, 22, 22, 21, 9, 7, 2, 1, 1]

现在,target_index将是列表中第一个出现60的索引,即2,也就是第个索引。 然后,keys按照它们的值进行排序(不是反向排序)。 接下来,我们的目标键变成了倒数个元素之后的元素,我们可以通过我们的target_index访问它们,像这样:keys[-target_index:]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接