繁体   English   中英

Python:如何在同质值字典中进行搜索

[英]Python: how to search within a homogenous values dictionary

我有这本字典:

dict = {'a': [1, 'Hello', 3], 'b': {1, 2, 90}, 'c': (1, 2, 'tuple'), 'd': 3}

我试图打印每个键包含值3。输出必须是ad

我很累像这样:

[key for key, vals in dict.items() if 3 in vals]

但有一个错误:int不可迭代,我也尝试用于:

>>> for i in dict.values():
...     if 3 in dict.values():
...             print(i)

我也试过了,但是没有用

>>> for i in dict.keys():
...     if 3 in dict[i]:
...             print(i)

第2部分:假设如果值包含3,则我能够打印键,那么如果值是list或tuple,如何获得索引?

[key for key, vals in dict.items() if 3==vals or 3 in vals]

您得到的错误是因为并非所有值都属于同一类型。 您的评估需要确定键是否等于3,然后返回true,或者值是否为容器,请检查3是否是其中的一部分。

要获取列表或元组中的值的索引,可以使用

>>> l = [1, 2, 'just', 3, 'p']
>>> l.index(3)
3

>>> t = (1, 2, 'word', 3)
>>> t.index(3)
3
>>> 
for k, v in dict.items():
    try:
        if 3 in v:
            print(k)
    except TypeError:
        if v == 3:
            print(k)

另一种方法是测试如果键的值不是标量,尝试使用之前in

def in_key(value, vals):
    if isinstance(vals, (list, tuple, set)):
        return value in vals
    else:
        return value == vals

lst = [key for key, vals in dict.items() if in_vals(3, vals)]

您的代码几乎正确,只需检查等于或包含在一组val中的项目即可:

dict = {'a': [1, 'Hello', 3], 'b': {1, 2, 90}, 'c': (1, 2, 'tuple'), 'd': 3}

print [key for key, vals in dict.items() if 3 == vals or 3 in vals]
['a', 'd']

这里有一个现场例子

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM