2016-12-14 47 views
1

我有一个像下面显示的字典结构,我想从中提取"EV=5.0"部分。只是它的第一个例子。从字典检索信息而不使用密钥

my_dict = {('zone1', 'pcomp100002', '33x75'): {('Dummy', 'EV=5.0', -5.0, -5.0, -5.0): 68.49582}, ('zone1', 'pcomp100004', '33x75'): {('Dummy', 'EV=5.0', -5.0, -5.0, -5.0): 37.59079}} 

注意,我唯一知道的是dict的结构,但不是实际的主keys(例如,('zone1', 'pcomp100002', '33x75'))或子keys(例如,('Dummy', 'EV=5.0', -5.0, -5.0, -5.0)。

换句话说,我知道我想要检索的信息的位置。存在于位置的所有子keys 1.

我想出了两种方法可以做到这一点,但我想他们都没有:

# method 1 - unreadable 
print(list(list(my_dict.values())[0].keys())[0][1]) 

# method 2 - two loops broken in their first iteration 
for i in a.values(): 
    for j in i: 
     print(j[1]) 
     break 
    break 

整个字典转换为字符串并seraching为"EV="也发生在我但这是我在很长一段时间以来最丑陋的想法。

有没有更好的方法,我失踪了?

+0

怎么样'[数据[1]键my_dict.values()在关键数据]'? – styvane

+0

实际字典比这里显示的示例长很多,所以你的列表理解不会很有效。但如果再加上'next',我们可能会去某个地方 –

+0

'next'只会返回第一个值。我不知道这是你想要的,这就是为什么我发表评论。 – styvane

回答

3

你可以把第2版到发电机的表达和使用next

>>> my_dict = {('zone1', 'pcomp100002', '33x75'): {('Dummy', 'EV=5.0', -5.0, -5.0, -5.0): 68.49582}, ('zone1', 'pcomp100004', '33x75'): {('Dummy', 'EV=5.0', -5.0, -5.0, -5.0): 37.59079}} 
>>> next(k[1] for v in my_dict.values() for k in v) 
'EV=5.0' 
+0

我认为这是一样好,它会得到。谢谢! –