[英]How to get the values before a key and after a key
我下面有字典
{'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': []}
您可以使用迭代器迭代項目並附加到列表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')
...
您可以使用字典理解:
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']}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.