我对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
列表/生成器转换为列表元组,这正是您想要的。