亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何獲取鍵之前和鍵之后的值

如何獲取鍵之前和鍵之后的值

一只名叫tom的貓 2023-06-27 18:07:14
我下面有字典{'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': []}
查看完整描述

2 回答

?
慕尼黑5688855

TA貢獻1848條經驗 獲得超2個贊

您可以使用迭代器迭代項目并附加到before列表。當找到您要查找的鍵時,break從該循環開始,然后使用同一迭代器再次迭代以讀取列表的值after。


from collections import OrderedDict


d = 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_vals


before = 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')

    ...


查看完整回答
反對 回復 2023-06-27
?
繁花不似錦

TA貢獻1851條經驗 獲得超4個贊

您可以使用字典理解:


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']}


查看完整回答
反對 回復 2023-06-27
  • 2 回答
  • 0 關注
  • 151 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號