我对Python是新手,我正在努力学习词典的操作。我有一个字典,结构如下:

dict = {'city1':([1990, 1991, 1992, 1993],[1.5,1.6,1.7,1.8]),
        'city2':([1993, 1995, 1997, 1999],[2.5,3.6,4.7,5.8])

我想用以下方法转换的键
 'city': ([1990, 1.5],[1991, 1.6],[1992,1.7],[1993,1.8])

我尝试使用for循环遍历这些值并为每个键创建一个新值。然而,这似乎真的很缓慢和笨拙。有没有什么病态的方法可以达到这个目标?
谢谢!

最佳答案

这将为您提供所需的输出:

d = { k : tuple(map(list, zip(*d[k]))) for k in d }

输出:
{'city2': ([1993, 2.5], [1995, 3.6], [1997, 4.7], [1999, 5.8]), 'city1': ([1990, 1.5], [1991, 1.6], [1992, 1.7], [1993, 1.8])}

另外,请考虑与dict不同的名称,因为这是内置dict类的名称。
zip(*d[k])zip(d[k][0], d[k][1])的简化版本,但它们都做同样的事情并生成成对元组。
map(list, ...)生成一个映射对象,该对象将zip中的每个元素转换为列表(在python2中,元组将自动转换为列表)
tuple(...)map列表/生成器转换为列表元组,这正是您想要的。

09-17 09:30