从字典追加时将元组列表转换为列表列表

时间:2019-01-17 00:54:02

标签: python

尝试从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”方法是什么?

2 个答案:

答案 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的值匹配时,ddv中项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)