尝试从python中的混乱结构中合并数据。
首先,给我一个元组列表,形式为
f = [('str1',7.0), ('str2',2.8), ('str3',11.2)]
还有一个形式的字典
d = {'aa':'str2', 'bb':'str3', 'cc':'str1'}
其中每个值都是唯一的(无需检查),并且d中的每个值与f的每个元组中的第一个元素一对一地映射。我需要将f更改为列表列表,并将匹配键从d附加到f中列表的适当元素。在上面的示例中,所需的输出是
output = [['str1',7.0,'cc'], ['str2',2.8,'aa'], ['str3',11.2,'bb']]
现在,我正在使用嵌套的for循环进行此操作。这样做的更好/“ python-y”方法是什么?
答案 0 :(得分:3)
您可以交换d
中的键/值对以获得更有效的解决方案:
f = [('str1',7.0), ('str2',2.8), ('str3',11.2)]
d = {'aa':'str2', 'bb':'str3', 'cc':'str1'}
new_d = {b:a for a, b in d.items()}
new_f = [[a, b, new_d[a]] for a, b in f]
输出:
[['str1', 7.0, 'cc'], ['str2', 2.8, 'aa'], ['str3', 11.2, 'bb']]
答案 1 :(得分:3)
无需交换,就可以用更Python化的理解直接写出来:
output = [[dv, f2, dk] for f1, f2 in f for dk, dv in d.items() if dv == f1]
用简单的英语:创建一个包含dv, f2, dk
列表的列表,其中f2
是(f1, f2)
中元组f
的第二个值,其中dk
和每当dv
的值与dk: dv
的值匹配时,d
是dv
中项f1
的键和值。
或作为功能齐全的脚本:
f = [('str1', 7.0), ('str2', 2.8), ('str3', 11.2)]
d = {'aa': 'str2', 'bb': 'str3', 'cc': 'str1'}
desired_output = [['str1', 7.0, 'cc'], ['str2', 2.8, 'aa'], ['str3', 11.2, 'bb']]
output = [[dv, f2, dk] for f1, f2 in f for dk, dv in d.items() if dv == f1]
print(output == desired_output)