如何获取键之前和键之后的值

我下面有字典


{'1': {'Col1': 'Val1', 'Col2': 'Val2', 'output': 'Out1'},

 '2': {'Col1': 'Val1', 'Col2': 'Val2', 'output': 'Out1'},

 '3': {'Col1': 'Val1', 'Col2': 'Val2', 'output': 'Out1'},

 '4': {'Col1': 'Val1', 'Col2': 'Val2', 'output': 'Out1'}}

我需要获取键之前的值output


由于字典是无序的,我已转换为以下内容


              OrderedDict([('1',

              OrderedDict([('Col1', 'Val1'),

                           ('Col2', 'Val2'),

                           ('output', 'Out1')])),

             ('2',

              OrderedDict([('Col1', 'Val1'),

                           ('Col2', 'Val2'),

                           ('output', 'Out1')])),

             ('3',

              OrderedDict([('Col1', 'Val1'),

                           ('Col2', 'Val2'),

                           ('output', 'Out1')])),

             ('4',

              OrderedDict([('Col1', 'Val1'),

                           ('Col2', 'Val2'),

                           ('output', 'Out1')]))])

预期输出如下,需要先提取值output


{'1': ['Val1', 'Val2'],

'2': ['Val1', 'Val2'],

'3': ['Val1', 'Val2'],

'4': ['Val1', 'Val2']}

预期输出如下,需要提取output键后的值


{'1': [],

'2': [],

'3': [],

'4': []}

用于测试的示例字典


{'1': {'Col1': 'Val1', 'output': 'Out1', 'test': 'Out1'},

 '2': {'Col1': 'Val1', 'output': 'Out1', 'test': 'Out1'},

 '3': {'Col1': 'Val1','output': 'Out1'},

 '4': {'Col1': 'Val1', 'output': 'Out1'}}

预期输出如下,需要先提取值output


{'1': ['Val1'],

'2': ['Val1'],

'3': ['Val1'],

'4': ['Val1']}

预期输出如下,需要提取output键后的值


{'1': ['Out1'],

'2': ['Out1'],

'3': [],

'4': []}


慕森卡
浏览 142回答 2
2回答

繁星coding

您可以使用迭代器迭代项目并附加到before列表。当找到您要查找的键时,break从该循环开始,然后使用同一迭代器再次迭代以读取列表的值after。from collections import OrderedDictd = OrderedDict([('1',                  OrderedDict([('Col1', 'Val1'),                               ('Col2', 'Val2'),                               ('output', 'Out1')])),                 ('2',                  OrderedDict([('Col1', 'Val1'),                               ('Col2', 'Val2'),                               ('output', 'Out1')])),                 ('3',                  OrderedDict([('Col1', 'Val1'),                               ('Col2', 'Val2'),                               ('output', 'Out1')])),                 ('4',                  OrderedDict([('Col1', 'Val1'),                               ('Col2', 'Val2'),                               ('output', 'Out1')]))])def vals_before_and_after(od, key):    it = iter(od.items())    before_vals = []    for k, v in it:        if k == key:            break        before_vals.append(v)    after_vals = [v for k, v in it]    return before_vals, after_valsbefore = OrderedDict()after = OrderedDict()for k, v in d.items():    before[k], after[k] = vals_before_and_after(v, 'output')print(before)print(after)给出:OrderedDict([('1', ['Val1', 'Val2']), ('2', ['Val1', 'Val2']), ('3', ['Val1', 'Val2']), ('4', ['Val1', 'Val2'])])OrderedDict([('1', []), ('2', []), ('3', []), ('4', [])])如果您正在查找的密钥从未找到(break从未执行过),您也可能会引发异常。例如:    ...    for k, v in it:        if k == key:            break        before_vals.append(v)    else:        raise RuntimeError(f'The key {key} was not found')    ...

慕田峪7331174

您可以使用字典理解:dx = {k: list({i:x for i, x in v.items() if x != 'Out1'}.values()) for k,v in d.items()}print(dx){'1': ['Val1', 'Val2'], '2': ['Val1', 'Val2'], '3': ['Val1', 'Val2'], '4': ['Val1', 'Val2']}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python