我得到了一个嵌套的字典,如下所示,它将在输入字典中的第一个键时返回第三个键
tree = {"Luke" : {"Darth Vader" : {"The Chancellor"}},
"Neal" : {"Les" : {"Joseph"}},
"George" : {"Fred" : {"Mickey"}},
"Robert" : {"Tim" : {"Michael"}},
"Juan" : {"Hunter" : {"Thompson"}}}
check_con = input("Enter your Name")
for fi_name,fi_second in tree.items():
if check_con in fi_name:
for fi_third,fi_fourth in fi_second.items():
print(fi_fourth)
我觉得它还有更多步骤,还有其他方法可以做到吗?
问候
答案 0 :(得分:3)
您可以使用默认值为空dict的dict.get
方法来获取顶级dict,然后将其值转换为iter,使用next
来获取第一个值
>>> check_con = 'Neal'
>>> next(iter(tree.get(check_con, {}).values()), '')
{'Joseph'}
>>>
>>> check_con = 'xxx'
>>> next(iter(tree.get(check_con, {}).values()), '')
''
>>>
答案 1 :(得分:1)
您可以简单地使用try-excep
表达式来查找您的名字是否存在于字典中。如果存在,则可以返回各自值的所有值:
def get_nested_item(tree, check_on):
try:
sub_dict = tree[check_on]
except KeyError:
print("No result")
return
else:
return sub_dict.values()
还请注意,关于检查字典中是否存在您的姓名,您要在此处进行的是以下行中的成员资格检查:
if check_con in fi_name:
不会检查是否相等,而是检查check_con
是否出现在字典键中。但是,如果这是您要的内容,则必须遍历您的商品并找到想要的商品。但也请注意,这可能有多个答案,换句话说,可能有多个与您的条件匹配的键,这与使用字典的整个目的相矛盾。
演示:
In [11]: get_nested_item(tree, "George")
Out[11]: dict_values([{'Mickey'}])
In [12]: get_nested_item(tree, "Luke")
Out[12]: dict_values([{'The Chancellor'}])
In [13]: get_nested_item(tree, "Sarah")
No result
答案 2 :(得分:1)
这是一种变体,其中我使用<div style="float:left;">
<label for="phoneNumber">Home Phone</label>
<div style="background:yellow; ">(<input style="width:20px;" type="tel" name="ext" id="phoneNumberExt" autocomplete="tel">)
<input style="width:70%;" type="tel" name="phone" id="phoneNumber" autocomplete="tel"></div>
</div>
来获取next(iter(...))
和dict
的“第一个”元素(请注意,{{1}中最里面的花括号是}是set
,而不是tree
):
set
因为dict
和def get(tree, name):
def first(seq):
return next(iter(seq))
if name in tree:
return first(first(tree[name].values()))
else:
return None
print(get(tree=tree, name='Juan')) # 'Thompson'
print(get(tree=tree, name='Jan')) # None
(set
返回的类型)都是不可索引的(没有dict_values
方法),我使用{ {3}},并使用iter
获取第一个元素。