如何从多个 Python dict 条目中动态提取数据

Ger*_*era 5 python

假设我有一个这样的字典:

my_dict = {something: 'blabla', result: 'something', value_0_0: 'apple', value_0_1: 'ball', value_1_0: 'banana', value_1_1: 'car', value_2_0: 'orange', value_2_1: 'toy'}

dict 可能有其他名称的其他键值条目,例如:result: 'something'。我只想用以下结构过滤这些键:

value_X_Y

期望的输出:

0values = "apple ; banana ; orange"

1values = "ball ; car; toy"

如果字典的大小是固定的,您可以执行以下操作:

for x in my_dict:
    if(x == 'value_0_0'):
        #do something
    if(x == 'value_0_1'):
        #do something
    if(x == 'value_1_0'):
        #do something
    if(x == 'value_1_1'):
        #do something
    if(x == 'value_2_0'):
        #do something
    if(x == 'value_2_1'):
        #do something
Run Code Online (Sandbox Code Playgroud)

但是由于字典没有固定大小并且可以有 3 个值或 50 (例如) value_50_0, value_50_1,我想动态处理数据。

我怎么能得到这样的东西?

任何见解将不胜感激。

Ism*_*sma 1

以下示例使用正则表达式来标识以“value_”开头的键并捕获最后一个数字,以使用它来创建包含数组和相关值的新字典:

import re

my_dict = {'something': 'blabla', 'result': 'something','value_0_0': 'apple', 'value_0_1': 'ball', 'value_1_0': 'banana', 'value_1_1': 'car', 'value_2_0': 'orange', 'value_2_1': 'toy'}
result = {}

for key, value in my_dict.items():
    # Get last number from the key to be used as the key of the result array
    m = re.match(r'^value\_\d+\_(\d+$)', key)
    if m is not None:
        result_key = m.groups()[0] + 'values'
        if not result_key in result:
            result[result_key] = []
        
        result[result_key].append(value)

print(result)
Run Code Online (Sandbox Code Playgroud)

结果:

{'0values': ['apple', 'banana', 'orange'], '1values': ['ball', 'car', 'toy']}
Run Code Online (Sandbox Code Playgroud)