Python嵌套字典理解返回空字典

时间:2013-11-17 18:11:08

标签: python dictionary list-comprehension

我正在使用字典理解来提取嵌套值。我有以下代码(作为示例):

d = {1: 'a', 2: 'b', 3: 'c'}
e = {4: 'd', 5: 'e', 6: 'f'}
f = {7: 'g', 8: 'h', 9: 'i'}

# stick them together into another dict
data_dict = {'one': d, 'two': e, 'three': f}
#say we're looking for the key 8

output = {outer_key: {inner_key: inner_value for inner_key, inner_value in outer_value.items() if inner_key == 8} for outer_key, outer_value in data_dict.items()}
output = {'one': {}, 'three': {8: 'h'}, 'two': {}}

我需要做些什么来获得JUST'三'及其价值?我不想返回空的比赛。

THX

2 个答案:

答案 0 :(得分:5)

这样的事情:

>>> {k: {8: v[8]} for k, v in data_dict.items() if 8 in v}
{'three': {8: 'h'}}

答案 1 :(得分:0)

对162多行的理解太大了。这是传统方式:

#!/usr/local/cpython-3.3/bin/python

import pprint

d = {1: 'a', 2: 'b', 3: 'c'}
e = {4: 'd', 5: 'e', 6: 'f'}
f = {7: 'g', 8: 'h', 9: 'i'}

# stick them together into another dict
data_dict = {'one': d, 'two': e, 'three': f}
#say we're looking for the key 8

def just_8(dict_):
    outer_result = {}
    for outer_key, inner_dict in dict_.items():
        inner_result = {}
        if 8 in inner_dict:
            inner_result[8] = inner_dict[8]
        if inner_result:
            outer_result[outer_key] = inner_result
    return outer_result

output = {outer_key: {inner_key: inner_value for inner_key, inner_value in outer_value.items() if inner_key == 8} for outer_key, outer_value in data_dict.items()}
pprint.pprint(output)

output_just_8 = just_8(data_dict)
pprint.pprint(output_just_8)