【问题标题】:Python - Zip 2 lists into 1 dictionaryPython - 将 2 个列表压缩到 1 个字典中
【发布时间】:2017-01-22 04:02:38
【问题描述】:

我正在用 Python 编写一些脚本并有一个小问题。

我有 2 个列表:

  1. ['name', 'age', 'sex', 'addr', 'city']

  2. ['Jack 24 male no23 NY', 'Jane 25 female no24 NY', 'Dane 14 male no14 NY']

所以我想拥有:

dictofJack = {'name': 'Jack', 'age': '24', 'sex': 'male', 'addr': 'no23', 'city':'NY'}

dictofJane = {'name': 'Jane', 'age': '25', 'sex': 'female', 'addr': 'no24', 'city':'NY'}

dictofDane = {'name': 'Dane', 'age': '14', 'sex': 'male', 'addr': 'no14', 'city':'NY'}

在这种情况下,如何使用 zip 使其在 for 循环中自动获取字典?

【问题讨论】:

标签: python python-2.7 list dictionary


【解决方案1】:

使用list comprehensiongenerator expression

>>> header = ['name', 'age', 'sex', 'addr', 'city']
>>> values = ['Jack   24   male   no23   NY',
              'Jane   25   female   no24   NY',
              'Dane   14   male   no14   NY']
>>> dictofJack, dictofJane, dictofDane = (
        dict(zip(header, value.split())) for value in values
    )
>>> dictofJack
{'addr': 'no23', 'age': '24', 'city': 'NY', 'name': 'Jack', 'sex': 'male'}
>>> dictofJane
{'addr': 'no24', 'age': '25', 'city':'NY', 'name': 'Jane', 'sex': 'female'}
>>> dictofDane
{'addr': 'no14', 'age': '14', 'city': 'NY', 'name': 'Dane', 'sex': 'male'}

顺便说一句,我建议不要使用字典的多个变量,而是使用字典的字典(想想需要 100 个字典的情况),使用dictionary comprehension

>>> {value.split()[0]: dict(zip(header, value.split())) for value in values}
{'Jane': {'addr': 'no24', 'age': '25', 'city': 'NY', 'name': 'Jane', 'sex': 'female'},
 'Dane': {'addr': 'no14', 'age': '14', 'city': 'NY', 'name': 'Dane', 'sex': 'male'},
 'Jack': {'addr': 'no23', 'age': '24', 'city': 'NY', 'name': 'Jack', 'sex': 'male'}}

【讨论】:

  • 2人同名的情况如何?
  • 我有这种情况:header = ['name', 'age', 'sex', 'addr', 'city'] values = ['Jack 24 male no23 NY', 'Jane 25 female no24 NY', 'Jane 14 male no14 NY'] print {value.split()[0]: dict(zip(header, value.split())) for value in values} 它会像这样打印:{' Jane': {'addr': 'no14', 'age': '14', 'city': 'NY', 'name': 'Jane', 'sex': 'male'}, 'Jack': { 'addr': 'no23', 'age': '24', 'city': 'NY', 'name': 'Jack', 'sex': 'male'}} 那么我们该如何解决呢?跨度>
  • @ThắngPhạmNgọc,如何使用字典列表:[dict(zip(header, value.split())) for value in values]`?
  • 它将返回一个包含多个字典的列表,如下所示: [{'addr': 'no23', 'age': '24', 'city': 'NY', 'name': 'Jack', 'sex': 'male'}, {'addr': 'no24', 'age': '25', 'city': 'NY', 'name': 'Jane', 'sex': 'female'}, {'addr': 'no14', 'age': '14', 'city': 'NY', 'name': 'Jane', 'sex': 'male'}] 有效,现在我将尝试将该列表拆分为多个字典。谢谢。
猜你喜欢
  • 1970-01-01
  • 2021-04-21
  • 2021-02-10
  • 2016-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多