[英]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。输出必须是a
和d
我很累像这样:
[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.