首页 > 解决方案 > 准确地将字典返回到元组

问题描述

我正在尝试从 a 中的tuples各种值创建一组dict。使用下面的示例,它一直有效,直到_10 integer. 所以上面的任何东西_9都会被覆盖。例如_12变成_2.

time = [1]

d = ({  
    'A1_S' : [10],    
    'A2_S' : [20],                       
    'A3_S' : [30],    
    'A4_S' : [40],        
    'A5_S' : [50],    
    'A6_S' : [60],                       
    'A7_S' : [70],    
    'A8_S' : [80],                    
    'A9_S' : [90],    
    'A10_S' : [100],                       
    'A11_S' : [110],    
    'A12_S' : [120],
    'A13_S' : [130],    
    'A14_S' : [140],                       
    'A15_S' : [150],                        
    }) 

tuples = [((t, k.split('_')[0][0], int(k.split('_')[0][1]), k.split('_')[1]), v[i]) for k,v in d.items() for i,t in enumerate(time)]

输出:

[((1, 'A', 1, 'S'), 10), ((1, 'A', 2, 'S'), 20), ((1, 'A', 3, 'S'), 30), ((1, 'A', 4, 'S'), 40), ((1, 'A', 5, 'S'), 50), ((1, 'A', 6, 'S'), 60), ((1, 'A', 7, 'S'), 70), ((1, 'A', 8, 'S'), 80), ((1, 'A', 9, 'S'), 90), ((1, 'A', 1, 'S'), 100), ((1, 'A', 1, 'S'), 110), ((1, 'A', 1, 'S'), 120), ((1, 'A', 1, 'S'), 130), ((1, 'A', 1, 'S'), 140), ((1, 'A', 1, 'S'), 150)]

预期输出:

[((1, 'A', 1, 'S'), 10), ((1, 'A', 2, 'S'), 20), ((1, 'A', 3, 'S'), 30), ((1, 'A', 4, 'S'), 40), ((1, 'A', 5, 'S'), 50), ((1, 'A', 6, 'S'), 60), ((1, 'A', 7, 'S'), 70), ((1, 'A', 8, 'S'), 80), ((1, 'A', 9, 'S'), 90), ((1, 'A', 10, 'S'), 100), ((1, 'A', 11, 'S'), 110), ((1, 'A', 12, 'S'), 120), ((1, 'A', 13, 'S'), 130), ((1, 'A', 14, 'S'), 140), ((1, 'A', 15, 'S'), 150)]

标签: pythondictionarytuples

解决方案


问题在这里:

int(k.split('_')[0][1]

你只在'A'之后抓取一个字符,你的意思是在'A'之后抓取所有字符直到'_'。您可以使用它来抓取所有字符,直到拆分:

int(k.split('_')[0][1:]

所以整个事情应该是:

tuples = [((t, k.split('_')[0][0], int(k.split('_')[0][1:]), k.split('_')[1]), v[i]) for k,v in d.items() for i,t in enumerate(time)]

推荐阅读