【问题标题】:list to dictionary python列表到字典python
【发布时间】:2015-05-30 01:36:09
【问题描述】:

这是我的清单

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

我能做什么?

【问题讨论】:

  • 对于初学者,您可以缩进您的示例代码,这将使其更具可读性。
  • 仅供参考,您可以将 zip(...) 调用替换为 enumerate(myList)

标签: python list dictionary list-comprehension


【解决方案1】:
  • 将列表转换为迭代器
  • 现在循环遍历它以获取密钥。
  • 对于每次迭代期间的值,在迭代器上调用 itertools.islice。然后在 slice 对象上调用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]}

【讨论】:

    【解决方案2】:

    我会使用 itertools。

    这是把你推向正确的方向:

    from itertools import islice
    

    itertools.islice查看示例

    【讨论】:

    • 它实际上回答了这个问题(或者至少做了一个很好的尝试)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    相关资源
    最近更新 更多