Python 如何将列表列表更改为字典的字典?
例如,我有下面的列表Python 如何将列表列表更改为字典的字典?,python,python-3.x,dictionary,Python,Python 3.x,Dictionary,例如,我有下面的列表 A = [['PokedexNumber', 'Name', 'Type', 'Total'], [1.0, 'Bulbasaur', 'GrassPoison', 318.0], [2.0, 'Ivysaur', 'GrassPoison', 405.0],[3.0, 'Venusaur', 'GrassPoison', 525.0]] 我怎样把它改成字典 B = { 1.0 : { 'Name' : 'Bulbasaur', 'Type' : 'GrassPo
A = [['PokedexNumber', 'Name', 'Type', 'Total'], [1.0, 'Bulbasaur', 'GrassPoison', 318.0], [2.0, 'Ivysaur', 'GrassPoison', 405.0],[3.0, 'Venusaur', 'GrassPoison', 525.0]]
我怎样把它改成字典
B = { 1.0 : { 'Name' : 'Bulbasaur', 'Type' : 'GrassPoison', 'Total' : 318.0},
2.0 : {'Name' : 'Ivysaur', 'Type' : 'GrassPoison', 'Total' : 405.0},
3.0 : {'Name' : 'Venusaur', 'Type' : 'GrassPoison', 'Total' : 525.0}
}
下面是一个字典理解与切片,应该做到这一点:
A = [['PokedexNumber', 'Name', 'Type', 'Total'], [1.0, 'Bulbasaur', 'GrassPoison', 318.0], [2.0, 'Ivysaur', 'GrassPoison', 405.0],[3.0, 'Venusaur', 'GrassPoison', 525.0]]
B = {x[0]: dict(zip(A[0][1:], x[1:])) for x in A[1:]}
print(B)
输出:
{
1.0:{'Name':'Bulbasaur','Type':'GrassPoison','Total':318.0},
2.0:{'Name':'Ivysaur','Type':'GrassPoison','Total':405.0},
3.0:{'Name':'Venusaur','Type':'GrassPoison','Total':525.0}
}
如果您愿意使用第三方库,您可以使用Pandas:
import pandas as pd
headers, *data = A
df = pd.DataFrame(data, columns=headers)
B = df.set_index('PokedexNumber').to_dict('index')
结果:
{1.0: {'Name': 'Bulbasaur', 'Type': 'GrassPoison', 'Total': 318.0},
2.0: {'Name': 'Ivysaur', 'Type': 'GrassPoison', 'Total': 405.0},
3.0: {'Name': 'Venusaur', 'Type': 'GrassPoison', 'Total': 525.0}}
{1.0: {'Name': 'Bulbasaur', 'Type': 'GrassPoison', 'Total': 318.0},
2.0: {'Name': 'Ivysaur', 'Type': 'GrassPoison', 'Total': 405.0},
3.0: {'Name': 'Venusaur', 'Type': 'GrassPoison', 'Total': 525.0}}
试试这个:
>>> A = [['PokedexNumber', 'Name', 'Type', 'Total'], [1.0, 'Bulbasaur', 'GrassPoison', 318.0], [2.0, 'Ivysaur', 'GrassPoison', 405.0],[3.0, 'Venusaur', 'GrassPoison', 525.0]]
>>> B = {}
>>> for p in A[1:]:
... B[p[0]] = { 'name': p[1], 'type': p[2], 'total': p[3] }
...
>>> B
{1.0: {'total': 318.0, 'type': 'GrassPoison', 'name': 'Bulbasaur'}, 2.0: {'total': 405.0, 'type': 'GrassPoison', 'name': 'Ivysaur'}, 3.0: {'total': 525.0, 'type': 'GrassPoison', 'name': 'Venusaur'}}
>>>
您可以使用序列解包和字典理解:
(_, *headers), *data = A
res = {num: dict(zip(headers, values)) for num, *values in data}
结果:
{1.0: {'Name': 'Bulbasaur', 'Type': 'GrassPoison', 'Total': 318.0},
2.0: {'Name': 'Ivysaur', 'Type': 'GrassPoison', 'Total': 405.0},
3.0: {'Name': 'Venusaur', 'Type': 'GrassPoison', 'Total': 525.0}}
{1.0: {'Name': 'Bulbasaur', 'Type': 'GrassPoison', 'Total': 318.0},
2.0: {'Name': 'Ivysaur', 'Type': 'GrassPoison', 'Total': 405.0},
3.0: {'Name': 'Venusaur', 'Type': 'GrassPoison', 'Total': 525.0}}