假设我有一个这样的字典:
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,我想动态处理数据。
我怎么能得到这样的东西?
任何见解将不胜感激。
以下示例使用正则表达式来标识以“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)