列表到字典 python
list to dictionary python
这是我的清单
myList = ['Bob', '5-10', 170, 'Tom', '5-5', 145, 'Bill', '6-5', '215']
我想做成这样的字典
{'Bob': ['5-10', 170], 'Bill': ['6-5', '215'], 'Tom': ['5-5', 145]}
我想到了这个,但它非常丑陋,而且无法放大。
def MakeDict():
d = {}
for x, i in zip(myList, range(len(myList))):
if i in (0, 3, 6):
name = x
elif i in (1, 4, 7):
hieght = x
elif i in (2, 5, 8):
wieght = x
d[name] = [hieght, wieght]
return d
我能做什么?
- 将您的列表转换为迭代器
- 现在遍历它以获取密钥。
- 对于每次迭代期间的值,在迭代器上调用
itertools.islice
。然后在切片对象上调用 list()
以获取列表。
>>> from itertools import islice
>>> myList = ['Bob', '5-10', 170, 'Tom', '5-5', 145, 'Bill', '6-5', '215']
>>> it = iter(myList)
>>> {key: list(islice(it, 2)) for key in it}
{'Bob': ['5-10', 170], 'Bill': ['6-5', '215'], 'Tom': ['5-5', 145]}
如果您不想导入任何内容,请使用 zip(*[iterator]*n)
magic:
>>> {key: [height, weight] for key, height, weight in zip(*[iter(myList)]*3)}
{'Bob': ['5-10', 170], 'Bill': ['6-5', '215'], 'Tom': ['5-5', 145]}
我会使用 itertools。
这是将您推向正确的方向:
from itertools import islice
查看示例 itertools.islice
这是我的清单
myList = ['Bob', '5-10', 170, 'Tom', '5-5', 145, 'Bill', '6-5', '215']
我想做成这样的字典
{'Bob': ['5-10', 170], 'Bill': ['6-5', '215'], 'Tom': ['5-5', 145]}
我想到了这个,但它非常丑陋,而且无法放大。
def MakeDict():
d = {}
for x, i in zip(myList, range(len(myList))):
if i in (0, 3, 6):
name = x
elif i in (1, 4, 7):
hieght = x
elif i in (2, 5, 8):
wieght = x
d[name] = [hieght, wieght]
return d
我能做什么?
- 将您的列表转换为迭代器
- 现在遍历它以获取密钥。
- 对于每次迭代期间的值,在迭代器上调用
itertools.islice
。然后在切片对象上调用list()
以获取列表。
>>> from itertools import islice
>>> myList = ['Bob', '5-10', 170, 'Tom', '5-5', 145, 'Bill', '6-5', '215']
>>> it = iter(myList)
>>> {key: list(islice(it, 2)) for key in it}
{'Bob': ['5-10', 170], 'Bill': ['6-5', '215'], 'Tom': ['5-5', 145]}
如果您不想导入任何内容,请使用 zip(*[iterator]*n)
magic:
>>> {key: [height, weight] for key, height, weight in zip(*[iter(myList)]*3)}
{'Bob': ['5-10', 170], 'Bill': ['6-5', '215'], 'Tom': ['5-5', 145]}
我会使用 itertools。
这是将您推向正确的方向:
from itertools import islice
查看示例 itertools.islice